API Polymarket vs Kalshi: panduan berdampingan untuk developer (auth, CLOB, WebSocket, data historis)

Polymarket dan Kalshi menjalankan primitif yang sama — kontrak ya/tidak di atas CLOB — lewat API yang sama sekali berbeda. Yang satu menuntut tanda tangan EIP-712 dan wallet Polygon; yang lain adalah endpoint REST dengan FIX opsional. Jika kamu sedang membangun agen prediksi, bot arbitrase, atau monitor smart money, inilah panduan berdampingan yang seharusnya sudah ada.
TL;DR
- •Polymarket memakai order yang ditandatangani EIP-712 dan dikirim ke CLOB-nya di Polygon — berlaku onboarding wallet dan biaya gas.
- •Kalshi memakai auth standar REST + WebSocket (email/password → token), plus gateway FIX opsional untuk pengguna institusional.
- •Keduanya mengekspos order book, trade, dan data historis, tetapi skema dan semantik resolusinya cukup berbeda sehingga library 'terpadu' menjadi topik Show HN yang paling banyak diminta di sudut tooling crypto/quant ini.
- •Arbitrase antarbursa atas kontrak yang setara adalah pola pembangunan paling umum (10+ bot open-source di GitHub).
- •API Pick Prediction Markets Search membungkus kedua bursa dalam satu endpoint POST untuk penemuan kontrak berbahasa alami — 50 kredit per panggilan, hasil semantik yang diperingkat.
Mengapa artikel ini ada
Jika kamu pernah menghabiskan waktu membangun di atas pasar prediksi, kamu tahu permintaan kanoniknya: 'saya ingin mengkueri Polymarket dan Kalshi dari skrip Python yang sama dan mendapatkan kembali daftar kontrak yang cocok dengan rapi.' Utas komentar HN di setiap Show HN pasar prediksi tak terhindarkan mengerucut ke hal ini — ada pola berulang berupa postingan "CCXT untuk pasar prediksi", yang menandakan permintaannya ada dan solusi yang ada belum benar-benar tepat sasaran.
Kesulitannya nyata. Kedua bursa menyelesaikan primitif yang sama — kontrak biner "ya/tidak" di atas central limit order book — tetapi mengeksposnya melalui API yang sangat berbeda. Berikut sudut pandang developer yang berfungsi atas keduanya, berdampingan, dengan kode yang benar-benar kamu butuhkan.
Dua bursa, dua arsitektur
Polymarket
- Chain: Polygon (penyelesaian dalam USDC.e)
- Auth: penandatanganan typed-data EIP-712 dengan private key wallet; tanpa bearer token tradisional
- Penempatan order: order yang ditandatangani dikirim ke API CLOB; gas dibayar oleh Polymarket via meta-transaksi
- Penemuan pasar: API Gamma (REST + JSON) untuk menjelajahi pasar aktif, plus API CLOB terpisah untuk order book langsung
- Data real-time: stream WebSocket untuk pembaruan order book dan trade
- Data historis: endpoint REST untuk trade; snapshot harian dapat diunduh terpisah
Kalshi
- Penyelesaian: USD via ACH dan wire (membutuhkan bank AS)
- Auth: email + password → bearer token, ATAU API key (institusional)
- Penempatan order: POST REST terautentikasi standar ke
/portfolio/orders - Penemuan pasar: endpoint REST untuk event, pasar, dan seri; skema yang rapi
- Data real-time: WebSocket dan FIX (institusional) untuk fill, order book, ticker
- Data historis: endpoint REST untuk trade; data resolusi dan penyelesaian pasar yang lugas
Berdampingan
| Polymarket | Kalshi | API Pick | |
|---|---|---|---|
| Auth | Order tertanda EIP-712 + wallet Polygon | Email/password → bearer; atau API key | Header x-api-key (penemuan read-only) |
| Penyelesaian | USDC di Polygon | Transfer bank USD (khusus AS) | n/a (hanya pencarian) |
| Legalitas di AS | Diblokir geografis (bukan AS) | Diregulasi CFTC | n/a |
| Real-time | WebSocket | WebSocket + FIX | n/a |
| Historis | Trade REST + snapshot | Trade REST + penyelesaian | Pencarian mengembalikan tautan ke sumber |
| Paling cocok | Crypto-native, pasar global, pelacakan smart money | Diregulasi AS, pemilu & ekonomi | Penemuan kontrak antarbursa |
Kode yang berfungsi: hello-world di masing-masing
Polymarket: mencantumkan pasar aktif
import requests
# Gamma API — no auth required for browsing
r = requests.get(
"https://gamma-api.polymarket.com/markets",
params={"active": "true", "limit": 25, "order": "volume"},
)
markets = r.json()
for m in markets[:5]:
print(m["question"], "→", m["outcomePrices"])Polymarket: menempatkan order tertanda (sketsa)
# Full order placement requires py-order-utils + a Polygon wallet
# This is the structural sketch — not runnable without wallet setup
from py_order_utils.builders import OrderBuilder
from py_order_utils.signer import Signer
signer = Signer(private_key="0xYOUR_PRIVATE_KEY")
builder = OrderBuilder(
exchange_address="0x...",
chain_id=137,
signer=signer,
)
order = builder.build_signed_order({
"maker": signer.address(),
"tokenId": "...", # the yes/no token ID for the market
"makerAmount": "1000000", # USDC.e in atomic units
"takerAmount": "1500000",
"side": "BUY",
"feeRateBps": 0,
"nonce": 0,
"expiration": 0, # 0 = no expiry
})
requests.post(
"https://clob.polymarket.com/order",
json={"order": order, "owner": signer.address(), "orderType": "GTC"},
)Kalshi: masuk dan menempatkan order limit
import requests
# Step 1 — login
r = requests.post(
"https://api.elections.kalshi.com/trade-api/v2/login",
json={"email": "you@example.com", "password": "..."},
).json()
token = r["token"]
headers = {"Authorization": f"Bearer {token}"}
# Step 2 — list markets in an event
r = requests.get(
"https://api.elections.kalshi.com/trade-api/v2/markets",
params={"event_ticker": "POTUS-2028", "limit": 25},
headers=headers,
).json()
print(r["markets"][:5])
# Step 3 — place a limit buy on the "Yes" side at 60 cents
r = requests.post(
"https://api.elections.kalshi.com/trade-api/v2/portfolio/orders",
headers=headers,
json={
"ticker": "POTUS-2028-DEM",
"type": "limit",
"action": "buy",
"side": "yes",
"count": 100, # 100 contracts
"yes_price": 60, # 60 cents
"client_order_id": "abc123",
},
)
print(r.json())API Pick: penemuan berbahasa alami di kedua bursa
import requests
r = requests.post(
"https://www.apipick.com/api/search/prediction-markets",
headers={"x-api-key": "pk_yourkey"},
json={"query": "Federal Reserve rate cuts before end of 2026"},
)
for hit in r.json()["results"][:5]:
print(hit["title"], "@", hit["venue"], "→", hit["url"])
# Returns ranked matches across Polymarket + Kalshi.
# 50 credits per call (~$0.05), only on HTTP 200.Tiga pola produksi yang benar-benar bekerja
1. Bot arbitrase antarbursa
Pola paling umum di GitHub: whitelist terkurasi berupa "kontrak Polymarket ini menyelesaikan pada hasil yang sama dengan kontrak Kalshi ini". Bot mengawasi kedua book, menghitung probabilitas implisit, dan mengambil posisi saat spread melewati ambang batas. Contoh: ImMike/polymarket-arbitrage dan realfishsam/prediction-market-arbitrage-bot.
Bagian yang sulit adalah whitelist-nya. "Apakah Fed akan memangkas 25 bps pada pertemuan Desember" tampak sama bagi manusia, tetapi sumber resolusi dan kata-kata persisnya berbeda; pencocok otomatis cukup sering salah sehingga bot sungguhan memakai pemetaan yang dikurasi manusia.
2. Monitor smart money
Para whale di Polymarket terlihat on-chain. Sebuah monitor mengawasi Polygon untuk aliran order besar pada pasar tertentu, memunculkan posisi besar, dan menandai pergerakan harga cepat sebelum berita utama sampai ke API berita. Padukan dengan News Search untuk memastikan apakah pergerakan yang tampak didorong berita atau murni spekulasi.
3. Feed prediksi untuk agen LLM
Menarik harga Polymarket / Kalshi terkini ke dalam konteks agen LLM memungkinkan model memberi jawaban yang berlandaskan probabilitas: "pasar taruhan saat ini mengimplikasikan probabilitas ~65% untuk X". Inilah kasus penggunaan penemuan yang dicakup API Pick — diberi pertanyaan berbahasa alami dari agen, ia mengembalikan kontrak yang diperingkat sehingga agen dapat mengutip harganya dalam jawaban.
Jebakan umum (dikumpulkan dari komentar HN)
- Penandatanganan EIP-712 Polymarket — tanda tangan order bersifat deterministik, tetapi kesalahan tooling sering terjadi. Gunakan
py-order-utilsalih-alih membuat sendiri. Sebagian besar kerugian bot di awal berasal dari ketidakcocokan tanda tangan yang ditolak diam-diam oleh API. - Rate limit Kalshi — terdokumentasi 100 req/detik tetapi lebih rendah untuk beberapa endpoint pada hari-hari event ramai (malam pemilu, FOMC). Bangun retry-with-backoff di klienmu.
- Lonjakan gas Polymarket — gas Polygon bisa melonjak pada hari bervolume besar. Polymarket mensubsidi sebagian besar penempatan order via meta-transaksi, tetapi penyelesaian dan penarikan dibayar pengguna. Perhitungkan ini dalam kalkulasi P&L.
- Ketidakcocokan penyelesaian — kontrak yang tampak setara kadang menyelesaikan secara berbeda. Selalu baca klausul sumber resolusi kedua kontrak sebelum pair-trading.
- Pemutusan WebSocket — kedua bursa rutin mengalami putus-sambung WebSocket. Logika rekoneksi dengan replay nomor urut tidak bisa ditawar untuk bot produksi apa pun.
Memilih dengan cepat
Ke mana arah semua ini
Pasar prediksi sedang mendapat perhatian mainstream yang tidak biasa saat ini: volume yang lebih besar seputar pemilu AS, event FOMC, olahraga, dan pertanyaan soal lepas landasnya AI; integrasi yang lebih luas dengan situs berita yang menampilkan probabilitas implisit; dan gelombang tooling developer (Show HN, repo GitHub) yang mengerucut ke tema yang sama — 'seseorang seharusnya menulis CCXT untuk pasar prediksi.'
Kami tidak yakin library eksekusi terpadu bergaya CCXT adalah bentuk yang tepat. Perbedaan dalam auth, penyelesaian, dan rezim regulasi terlalu dalam untuk diabstraksikan dengan rapi tanpa membohongi pengguna. Tetapi masalah penemuan — diberi pertanyaan berbahasa alami, temukan kontrak yang sudah ada — memang bisa diselesaikan dengan pencarian semantik, dan itulah yang dilakukan API Pick Prediction Markets Search. Temukan kontraknya; tempatkan order di bursa.
Pertanyaan yang Sering Diajukan
Bursa mana yang punya lebih banyak kontrak?
Saat tulisan ini dibuat, keduanya mencantumkan puluhan ribu pasar aktif. Polymarket condong ke crypto-native dan global (politik, olahraga, crypto, peristiwa terkini); Kalshi diregulasi CFTC dan berfokus pada AS (pemilu, ekonomi, cuaca, olahraga). Distribusi volume bervariasi menurut kategori — untuk pemilu AS Kalshi biasanya lebih dalam; untuk politik global dan pertanyaan crypto-native, Polymarket-lah yang lebih dalam.
Mengapa library 'terpadu' open-source terus bermunculan di Show HN?
Karena permintaannya ada dan belum ada yang menyelesaikannya dengan baik. Postingan Show HN seperti 'Open-source library to unify Polymarket and Kalshi APIs' dan 'dr-manhattan — CCXT for Prediction Markets' adalah pola yang berulang. Tantangannya adalah mencocokkan kontrak yang setara (hasil sama, kata-kata berbeda) dan merekonsiliasi semantik penyelesaian. Library biasanya berhasil pada wrapper auth tetapi berhenti sebelum pencocokan kontrak.
Bagaimana cara melakukan arbitrase dasar antarbursa?
Secara konsep: temukan dua kontrak yang menyelesaikan pada hasil yang sama di bursa berbeda, periksa probabilitas implisitnya, ambil sisi 'No' berharga lebih tinggi dan sisi 'Yes' berharga lebih rendah, lalu tahan hingga resolusi. Dalam praktiknya, gesekannya ada di eksekusi: biaya gas Polymarket, pendanaan USD Kalshi, eksekusi parsial, dan masalah pencocokan di atas. Sebagian besar bot arbitrase langsung di GitHub berjalan di atas whitelist pemetaan pasangan kontrak yang dikurasi, alih-alih menemukannya secara otomatis.
Apakah Polymarket legal di AS?
Polymarket saat ini tidak diizinkan untuk pengguna AS; aksesnya diblokir secara geografis. Kalshi diregulasi CFTC dan legal di AS. Jika kamu membangun produk untuk pengguna AS, Kalshi adalah satu-satunya pilihan. Jika kamu membangun secara global, Polymarket membawa cakupan pasar yang lebih luas.
Di mana posisi API Pick dalam stack ini?
API Pick Prediction Markets Search menyelesaikan masalah 'penemuan': diberi pertanyaan berbahasa alami (mis. 'Fed memangkas suku bunga sebelum akhir tahun'), ia mengembalikan kecocokan semantik yang diperingkat di seluruh kontrak Polymarket dan Kalshi dalam satu panggilan POST. Kami tidak menggantikan API eksekusi order — untuk menempatkan order kamu tetap pergi ke setiap bursa langsung. Kami membuat menemukan pasar yang tepat menjadi mudah.
API yang digunakan dalam artikel ini
Sarah Choy adalah CEO API Pick. Ia menulis tentang membangun API siap produksi untuk AI agent dan alur kerja LLM.