If you live in the US and want to build a prediction market bot, I would start on Kalshi. The international Polymarket lists the US as close-only, so you can close old trades there but cannot open new ones. Polymarket US is a separate, federally regulated exchange with its own API, and I have not built on it. Kalshi and the international Polymarket charge the same crypto taker fee, 0.07 x p x (1-p), where p is the price.

Outside the US, access stops deciding it, because Kalshi says it accepts traders from many countries (checked 10/10/2026). Crypto fees match, so I would pick the exchange that lists your markets, and only Kalshi offers a public demo exchange.

I built my Polymarket bot between December 2025 and March 2026, before I touched Kalshi. Then I moved my tests to Kalshi. I walled off my test bot so it can only reach the demo exchange, Kalshi’s practice exchange with fake money.

Kalshi and Polymarket, row by row, for someone writing a bot

RowKalshiPolymarket (international)
Can a US resident open new positions?Kalshi

Yes, if Kalshi's eligibility rules allow you and you pass its identity check (KYC)

CFTC release 8302-20 (federally approved exchange since 11/04/2020) · 10/10/2026

Polymarket (international)

No. The US is close-only on the website and the API, so you can close old trades but not open new ones. The exchange rejects orders from blocked regions.

docs.polymarket.com geoblock page · 10/10/2026

Open to traders outside the US?Kalshi

Yes, from many countries. You pass its identity check and confirm your country. Its Member Agreement lists the limits.

help.kalshi.com international access article · 10/10/2026

Polymarket (international)

Yes, except in the regions on its geoblock list

docs.polymarket.com geoblock page · 10/10/2026

RegulatorKalshi

The CFTC approved it as a federal exchange (a designated contract market). KalshiEX LLC runs it.

cftc.gov release 8302-20 · 10/10/2026

Polymarket (international)

An international exchange. Its US arm, Polymarket US, is a separate federally approved exchange run by QCX LLC.

cftc.gov designated contract market page 49571; polymarket.us footer · 10/10/2026

How the API checks it is youKalshi

An API key, plus a signature in the headers of each request. New keys use Ed25519 by default, and RSA-PSS with SHA-256 still works.

docs.kalshi.com API keys page · 10/10/2026

Polymarket (international)

Your wallet signs one standard message (EIP-712, called L1) to create or recover your API key, secret and passphrase. Your bot then signs each request with a code made from that secret (HMAC-SHA256, called L2). Each order also carries its own wallet signature.

docs.polymarket.com CLOB authentication · 10/10/2026

Taker fee per contractKalshi

0.07 x p x (1-p), rounded up, where p is the price. Some series multiply the fee, and some set the multiplier to 0.

Kalshi fee schedule PDF, effective 07/07/2026 · 10/10/2026

Polymarket (international)

feeRate x p x (1-p). The feeRate is 0.07 for crypto, 0.05 for sports, 0.04 for politics and 0 for geopolitics.

docs.polymarket.com/trading/fees · 10/10/2026

Maker feeKalshi

0 by default. A series can set a multiplier M, and then makers pay 0.0175 x M x p x (1-p).

Kalshi fee schedule PDF · 10/10/2026

Polymarket (international)

0 in every category. Crypto makers also share a daily rebate (money paid back) worth 20% of crypto taker fees.

docs.polymarket.com/trading/fees · 10/10/2026

Practice exchangeKalshi

A public demo exchange with fake money and separate credentials. Its prices may not reflect real markets.

docs.kalshi.com demo environment page · 10/10/2026

Polymarket (international)

None listed in the docs I read. They show only the live exchange (production) addresses.

docs.polymarket.com CLOB authentication · 10/10/2026

MoneyKalshi

US dollars

Kalshi fee schedule PDF and help pages · 10/10/2026

Polymarket (international)

USDC, a crypto coin pegged to the US dollar

docs.polymarket.com/trading/fees · 10/10/2026

Market depth I measuredKalshi

15-minute bitcoin markets had about 1 to 2 cents between bid and ask, with $450 to $15,001 at each price level. New York City weather markets had 0 to 4 price levels.

my own checks of live order books · 07/19/2026

Polymarket (international)

The World Cup winner event had about $501M ready to trade. A Japanese government bond yield market had $53.

my own checks of live markets · 06/24/2026

Polymarket US is a separate exchange with its own account and API. QCX LLC runs it, and the CFTC (Commodity Futures Trading Commission) regulates it as a federal exchange. Its API signs each request with Ed25519. Since 10/07/2026 its taker fee is 0.0695 x C x p x (1-p), or $1.74 per 100 contracts at 50 cents. Makers earn a rebate at 0.0125 on the same curve. You can ask its onboarding team for a preprod test exchange. Sources docs.polymarket.us and the polymarket.us footer, checked 10/10/2026.

For a US bot builder, the access row decides this before the fee row does, because the international Polymarket lists the US as close-only.

Source: Kalshi docs, help center and fee schedule, Polymarket docs, Polymarket US docs, CFTC, my own checks of live markets · 10/10/2026

Is Kalshi or Polymarket better for a trading bot?

For a US builder, Kalshi is the better pick of these two today, because the international Polymarket is close-only for US users. A US builder can also look at Polymarket US, a separate exchange. I have only built on Kalshi, so I can tell you how Kalshi behaves, but I cannot rank it against Polymarket US. None of this says which exchange gives you a real edge over the market price. I have not proven one on either exchange.

I wrote up the Polymarket build in how I built my Polymarket trading bot. It used py_clob_client, Polymarket’s Python client, with price feeds from Binance. Almost none of the code that talks to the exchange carried over, so I rebuilt my auth and order code for Kalshi.

I still think the switch was right. A bot you cannot run is a research project, and I wanted rules that let me go past paper trading.

Can US users use Polymarket?

US users cannot open new positions on the international Polymarket. The geoblock page I read on 10/10/2026 puts the United States in the close-only group, on both the website and the API. You can exit what you hold, and the docs say the exchange rejects orders from blocked regions.

I read the rule as following the person. A VPS (a rented server) in another country does not change where you live. Neither does a VPN (virtual private network). I will not suggest either one as a workaround, so if a tutorial tells you to use one, close the tab.

Can you build a bot on Polymarket US instead?

Yes, Polymarket US has its own API, but it is a separate exchange with a separate account. A company called QCX LLC runs it as a designated contract market under the CFTC (Commodity Futures Trading Commission), the US regulator. The CFTC lists its designation date as 07/09/2025. Covers, a betting news site, reported on 05/12/2026 that its iOS app had opened to people on the waitlist.

Its API looks a lot like Kalshi’s. You finish the identity check (KYC) in the app first, and its docs still say you may need an invite code. Then you make a key in its developer portal. Your bot signs the timestamp, method and path with Ed25519 and sends X-PM-Access-Key, X-PM-Timestamp and X-PM-Signature.

For testing, its docs list a preprod exchange that runs ahead of the live one. You get credentials for it by email from its onboarding team. I have not built on Polymarket US, so all of this comes from its docs, checked 10/10/2026.

If you are in the US and want Polymarket’s markets, check this exchange. The fee section below compares its rates.

Kalshi is a federally regulated exchange. The CFTC designated KalshiEX LLC as a contract market on 11/04/2020. That federal status is why I treat Kalshi as my US path.

It does not settle every question for every state or product, because Kalshi’s eligibility rules and your account terms decide what you can trade. I am a builder, so read this as my reasoning, and none of it is legal advice.

Regulation brings one practical cost. Kalshi requires its own identity check and a separate account, so the crypto wallet I set up for Polymarket does not carry over.

How do the Kalshi and Polymarket APIs compare?

Kalshi signs each request with one key pair, and the international Polymarket stacks several layers of signing.

On Kalshi, you keep the private key and Kalshi keeps the public key. Each private request sends KALSHI-ACCESS-KEY, KALSHI-ACCESS-TIMESTAMP and KALSHI-ACCESS-SIGNATURE. The signature covers the timestamp in milliseconds, the method and the path, with the query string removed. New keys use Ed25519 by default, and RSA-PSS with SHA-256 still works. My test bot used RSA-PSS, and I proved it end to end on 07/21/2026.

On the international Polymarket, your wallet signs one standard message (EIP-712) to create or recover an API key, secret and passphrase. Your bot then signs each private request with a code made from that secret (HMAC-SHA256). Each order also carries its own wallet signature. My codebase had to handle three wallet signature types, and each one signs differently.

Two Kalshi traps sit in my notes. First, the market list endpoint (/markets) returned null bid and ask in my July 2026 probes, so it showed no prices. For depth, call each market’s /markets/{ticker}/orderbook endpoint instead.

Second, Kalshi deprecated the old action and side fields on orders. New code should read outcome_side (yes or no) and book_side (bid or ask), and the order direction page says bid always means yes. Its order book feeds still price NO levels on the NO side by default. Set use_yes_price to true if you want one price scale, because Kalshi plans to flip that default.

Kalshi needs no key to read market data, so I could record live order books before I risked anything. The full signing code is in my Kalshi API tutorial for Python, which publishes 10/17/2026.

Which is cheaper, Kalshi or Polymarket fees?

Kalshi and the international Polymarket charge crypto takers the same curve. A taker order trades at once with an order already waiting in the order book. A maker order is the one that was waiting.

Kalshi’s general taker fee is 0.07 x C x p x (1-p), rounded up. C is the number of contracts and p is the price in dollars. The international Polymarket uses C x feeRate x p x (1-p), and its crypto feeRate is also 0.07. The curve peaks at 50 cents, where both cost $1.75 per 100 contracts.

The pain for a bot builder lives here. The break-even win rate is how often you must be right to lose no money after fees. A buy at 50 cents needs the YES side to win 51.75 percent of the time to break even. If your model thinks the true chance is 51 percent, you pay to lose.

Small orders feel it more, because Kalshi rounds the fee on each order up. Its own fee table lists $0.02 for 1 contract at 50 cents, which lifts that break-even to 52 percent. Thin edges die at the fee line before they ever meet the spread.

I learned this the embarrassing way. On 06/24/2026 I checked every Polymarket fee category I could reach. My notes recorded the crypto fee as a flat 7 percent of the full dollar size of a trade. So I concluded the fee killed every thin-edge idea there, and that Kalshi’s curved fee brought them back.

On 10/09/2026 I reread the Polymarket docs and found the same p x (1-p) curve. I do not know if the formula changed or I misread it. Either way, part of my early case for Kalshi rested on a fee gap. On crypto today, that gap mostly does not exist.

Same trade, both venues, fee per 100 contracts and break-even

Kalshi

$1.75

Break-even win rate 51.75%

Polymarket (international)

$1.75

Break-even win rate 51.75%

Taker orders pay the fee on both venues.

Maker orders show $0 on both. Some Kalshi series charge 0.0175 x M x p x (1-p) to makers. The Polymarket maker rebate is not modeled.

The Polymarket column shows the international exchange. US residents can only close trades there as of 10/10/2026. Polymarket US charges takers 0.0695 instead, which is $1.74 per 100 contracts at 50 cents (since 10/07/2026). Not financial advice.

Formulas used
  • kalshi_taker_fee ceil_to_cent(contracts x 0.07 x p x (1-p)) (standard series, M = 1)
  • kalshi_maker_fee 0 (default M = 0; show note that some series charge 0.0175 x M x p x (1-p))
  • polymarket_taker_fee round_5dp(contracts x feeRate x p x (1-p))
  • polymarket_maker_fee 0 (rebate program not modeled)
  • breakeven_yes_buy p + fee_per_contract (probability the YES side must win to break even)

At crypto rates the two taker fees follow the same curve. Before rounding, the fee moves your break-even win rate by 1.75 points at most, at a price of 50 cents. Rounding up on a single contract can make it 2 points.

Source: Kalshi fee schedule PDF (effective 07/07/2026); docs.polymarket.com/trading/fees · 10/10/2026

The rates still differ by category. The international Polymarket charges 0.05 on sports, 0.04 on politics and nothing on geopolitics. Kalshi uses one general rate, but each series, a family of related markets, can multiply it. Some series set the multiplier to 0, so I read the fee field on the market itself before I trust any docs page.

Polymarket US charges takers a little less. Since 10/07/2026 its rate is 0.0695 on standard markets, so 100 contracts at 50 cents cost $1.74. That puts the break-even win rate at 51.74 percent. It rounds each fee to the nearest cent, so a small order can round down as well as up.

Maker orders are where the three split. International Polymarket makers never pay, and crypto makers there share a daily rebate worth 20 percent of crypto taker fees. Polymarket US pays makers a rebate at 0.0125 on the same curve, or $0.31 per 100 contracts at 50 cents.

Kalshi makers pay nothing by default. The few series with a maker fee charge a quarter of the taker rate, 0.0175 against 0.07. All three reward the patient order, so my designs lean toward maker orders.

Once you know your break-even win rate, you can see how small your real edge is. The Kelly criterion is a formula that sizes a bet to your edge. Put your post-fee probability and the price into the free Kelly criterion calculator. Then size your stake from the edge that remains.

Can you test a trading bot without real money?

On Kalshi you can test the plumbing with fake money, and that is all the demo can prove. Its demo exchange runs on mock funds with separate credentials. Its docs warn that demo prices may not reflect real markets.

I measured that warning on 07/21/2026. My test bot refuses any server except the demo API. Signing, placing an order and canceling it all worked end to end, so the plumbing passed.

Then I counted. Of 628 open markets in the set my strategy watched, only 148 had prices on both sides. Order books near settlement were empty or absurdly wide, and many open markets were stale ghosts left over from May.

A 48-second dry run produced zero quotes from my strategy. That run was short, so the market count is the stronger evidence that the demo has almost no one to trade with.

So the demo proved my signing and order handling, but it could not tell me whether the idea makes money. My designs bet against the crowd, and that needs a real crowd. Kalshi’s live order books are public, so I record those instead.

Polymarket gave me less. The international Polymarket docs I read on 10/10/2026 list only live endpoints, so I tested that code with a dry-run mode inside my own bot.

Which has more liquidity, Kalshi or Polymarket?

Both exchanges have deep markets and ghost towns, so liquidity is a per-market question. The market you trade is the only order book that matters.

My Kalshi probes on 07/18/2026 and 07/19/2026 looked at 15-minute bitcoin markets. Their order books were about 1 to 2 cents wide, with $450 to $15,001 waiting at each price level. That depth looked like professional market makers, firms that quote both sides all day. Quoting against them at retail speed is a fight I expect to lose.

Kalshi’s daily markets on the New York City high temperature were thin, with 0 to 4 price levels and $100 to $2,500 per side. On Polymarket on 06/24/2026, the World Cup winner event showed about $501 million in liquidity. A Japanese bond yield market I sampled showed $53.

I once wrote notes on arbitrage across the two exchanges, which locks in a profit when their prices for one event disagree. For a US resident that idea dies at the international Polymarket geoblock, because you cannot open one side of the trade. Outside the US, if both exchanges accept you, the geoblock does not stop it. I have not tested whether the gaps there cover two sets of fees.

Which one do I build on, and why?

I build on Kalshi. The rules there allow my next step, and my test bot already runs against its demo exchange. My Kalshi work so far has two parts. One records order books from the live exchange, and the other is the test bot.

My own checklist gates live trading, and I cap the first budget. The bot also has a hard kill at a 30 percent drawdown, which means it stops once it is down 30 percent. Those are my settings for a test. They are not a recommendation.

I think the honest lesson from my records is about order of operations. If I started again, I would check access first, then auth, then fees, then liquidity. Strategy comes last because it is the part most likely to be wrong.

If you are hosting a Kalshi bot, I wrote about running an AI agent on a VPS. I also wrote about how I use Claude Code on a production trading bot. Claude Code is Anthropic’s AI coding tool.

This is not financial advice. I share how the exchanges work and where I failed, and I make no claim that any of it is profitable.

Sources

  1. Polymarket docs, Geographic restrictions (geoblock). https://docs.polymarket.com/developers/CLOB/geoblock. Checked 10/10/2026.
  2. Polymarket docs, Fees. https://docs.polymarket.com/trading/fees. Checked 10/10/2026.
  3. Polymarket docs, CLOB authentication. https://docs.polymarket.com/developers/CLOB/authentication. Checked 10/10/2026.
  4. Kalshi fee schedule PDF, effective 07/07/2026. https://kalshi.com/docs/kalshi-fee-schedule.pdf. Checked 10/10/2026.
  5. Kalshi docs, API keys. https://docs.kalshi.com/getting_started/api_keys. Checked 10/10/2026.
  6. Kalshi docs, Demo environment. https://docs.kalshi.com/getting_started/demo_env. Checked 10/10/2026.
  7. Kalshi docs, Order direction. https://docs.kalshi.com/getting_started/order_direction. Checked 10/10/2026.
  8. Kalshi help center, Can I trade on Kalshi from outside the United States? (03/20/2026). https://help.kalshi.com/en/articles/14026044-can-i-trade-on-kalshi-from-outside-the-united-states. Checked 10/10/2026.
  9. CFTC release 8302-20, Kalshi designated as a contract market. https://www.cftc.gov/PressRoom/PressReleases/8302-20. Checked 10/10/2026.
  10. CFTC DCM page, QCX LLC d/b/a Polymarket US. https://www.cftc.gov/IndustryOversight/IndustryFilings/TradingOrganizations/49571. Checked 10/10/2026.
  11. Polymarket US homepage footer. https://polymarket.us. Checked 10/10/2026.
  12. Polymarket US docs, Authentication. https://docs.polymarket.us/api-reference/authentication.md. Checked 10/10/2026.
  13. Polymarket US docs, Fee schedule. https://docs.polymarket.us/fees.md. Checked 10/10/2026.
  14. Polymarket US docs, Environments. https://docs.polymarket.us/trader-guide/environments.md. Checked 10/10/2026.
  15. Covers, Polymarket removes waitlist for US iOS users (05/12/2026). https://covers.com/industry/polymarket-removes-waitlist-launches-for-american-ios-users-may-12-2026. Checked 10/10/2026.

Enjoyed this post?

Subscribe to get notified when I publish new articles.

Join the trading list with the form here, and I will send you the Kalshi API tutorial and the Kalshi fees teardown first.

Keep reading