NEW: Live arbitrage across 10+ prediction markets.Arbitrage →
← Index
APIOct 2, 2026

Polymarket US API (2026): Keys, Endpoints and Rate Limits

Polymarket US API (2026): Keys, Endpoints and Rate Limits

The Short Answer

The Polymarket US API comes in two parts: a public API at gateway.polymarket.us that serves market data with no key, and an authenticated API at api.polymarket.us for orders, positions, balances and WebSocket streams. To trade, you verify your identity in the Polymarket US app, create a Key ID and Secret Key at polymarket.us/developer, and sign each request with that Ed25519 key. Both APIs allow 20 requests a second, per key for authenticated calls and per IP for public ones, and official Python and TypeScript SDKs handle the signing for you.

Key Takeaways

  • Polymarket US is a separate exchange from global Polymarket, with its own accounts, markets, documentation and API.
  • Market data needs no key. Trading needs identity verification in the app and a Key ID and Secret Key from the developer portal.
  • Requests are signed with Ed25519 over the timestamp, method and path, and timestamps must be within 30 seconds of server time.
  • The limit is 20 requests a second per API key, and 20 per IP on public endpoints. WebSockets are the way to avoid polling.
  • The official SDK is polymarket-us on both PyPI and npm, and it covers events, markets, orders, portfolio and account endpoints.

How is the Polymarket US API different from Polymarket's?

Polymarket US is the regulated version of Polymarket for US traders, explained in what Polymarket US is, and it runs on a separate stack. Nothing from the global Polymarket API carries over: there is no wallet, no CLOB credential and no Polygon transaction. Accounts hold US dollars at the exchange, and markets are addressed by slug.

PolymarketPolymarket US
APIsGamma, CLOB and Data APIsA public gateway and an authenticated API
AuthenticationA wallet plus CLOB credentials derived from itAn Ed25519 Key ID and Secret Key from the developer portal
CollateralpUSD on PolygonUS dollars held at the exchange
Market identifiersCondition IDs and token IDsMarket slugs
Official SDKs@polymarket/client and polymarket-clientpolymarket-us for Python and TypeScript

If you also build on global Polymarket, the Polymarket API guide covers that side.

How do you get a Polymarket US API key?

  1. Create an account in the Polymarket US app and complete identity verification. You need approval before you can trade or use the API.
  2. Open the developer portal at polymarket.us/developer and sign in with the same method you used in the app: Apple, Google or email.
  3. Create an API key. You get a Key ID and a Secret Key, and the secret is shown only once, so store it immediately.

Polymarket's documentation warns that switching between sign-in methods may break your API key access, and that you can email support if you need help or an invite code. Revoke a compromised key from the same portal.

How does authentication work?

Every authenticated request carries three headers:

HeaderValue
X-PM-Access-KeyYour Key ID
X-PM-TimestampThe current time in milliseconds
X-PM-SignatureAn Ed25519 signature of the timestamp, method and path, base64-encoded

Timestamps must be within 30 seconds of server time, so a drifting system clock is the first thing to check when signatures start failing. Without an SDK, signing looks like this, using the requests and cryptography packages:

import base64, os, time
import requests
from cryptography.hazmat.primitives.asymmetric import ed25519

key = ed25519.Ed25519PrivateKey.from_private_bytes(base64.b64decode(os.environ["POLYMARKET_SECRET_KEY"])[:32])

def headers(method, path):
    ts = str(int(time.time() * 1000))
    sig = base64.b64encode(key.sign(f"{ts}{method}{path}".encode())).decode()
    return {"X-PM-Access-Key": os.environ["POLYMARKET_KEY_ID"], "X-PM-Timestamp": ts,
            "X-PM-Signature": sig, "Content-Type": "application/json"}

path = "/v1/portfolio/positions"
print(requests.get("https://api.polymarket.us" + path, headers=headers("GET", path)).json())

The signed message is the timestamp, the HTTP method and the path joined together, and the request body is not part of it. The first 32 bytes of the decoded secret are the Ed25519 private key. The same three headers authenticate the WebSocket handshake.

What endpoints does the Polymarket US API have?

GroupAPIWhat it covers
MarketsPublicList markets, get one by ID or slug, the order book, best bid and offer, settlement price and price history
Events, series and sportsPublicEvents, series such as a league season, leagues, teams and game schedules
SearchPublicFull-text search across events and markets
OrdersAuthenticatedCreate, preview, modify, cancel and close positions, with batches of up to 20 orders
Portfolio and accountAuthenticatedPositions, activity including resolutions, balances and buying power
Combos and RFQsAuthenticatedCombo instruments and request-for-quote trading, generally available since 1 October 2026

Order types are limit and market orders, with time-in-force options of day, good till cancel, good till date, immediate or cancel, and fill or kill. Public data is a plain request, for example GET https://gateway.polymarket.us/v1/markets/{slug}/bbo for one market's best bid and offer.

What are the Polymarket US API rate limits?

The Retail API allows 20 requests a second per API key across all authenticated endpoints, and public endpoints allow 20 requests a second per IP. Going over returns 429 Too Many Requests, and Polymarket's guidance is to wait at least a second and retry with exponential backoff.

One error looks like a rate limit and isn't. During periods of higher latency, Polymarket US rejects any new order or cancel-replace that has not been processed within 5 seconds, to protect you from a fill at a stale price. Those rejects carry the message Global Rate Limit Exceeded, but the documentation is explicit that they are a transient latency reject, not a signal to throttle. Plain cancels are never rejected this way.

The best way to stay under the limits is to stop polling: cache market metadata, and stream orders, positions, balances and books over WebSocket instead of requesting them repeatedly.

How do you stream live Polymarket US data?

The authenticated API has two WebSocket endpoints, and both use the same three signed headers in the handshake, signed over the timestamp, GET and the socket path:

  • wss://api.polymarket.us/v1/ws/markets: market data with three subscription types, SUBSCRIPTION_TYPE_MARKET_DATA for the full book and market stats, SUBSCRIPTION_TYPE_MARKET_DATA_LITE for lightweight prices, and SUBSCRIPTION_TYPE_TRADE for trades.
  • wss://api.polymarket.us/v1/ws/private: your own orders, positions and balance updates.

Which Polymarket US SDK should you use?

Polymarket publishes polymarket-us for Python 3.10+, with sync and async clients, and for TypeScript on Node.js 18+. Both sign requests for you. Public market data works without keys:

from polymarket_us import PolymarketUS

client = PolymarketUS()

markets = client.markets.list({"limit": 5, "active": True, "closed": False})["markets"]
for m in markets:
    bbo = client.markets.bbo(m["slug"])["marketData"]
    bid, ask = bbo.get("bestBid"), bbo.get("bestAsk")
    print(m["question"], bid and bid["value"], ask and ask["value"])

Pass your keys to trade. This is the order shape from Polymarket's quickstart, buying 100 contracts at 55 cents:

import os
from polymarket_us import PolymarketUS

client = PolymarketUS(key_id=os.environ["POLYMARKET_KEY_ID"], secret_key=os.environ["POLYMARKET_SECRET_KEY"])

order = client.orders.create({
    "marketSlug": "your-market-slug",
    "intent": "ORDER_INTENT_BUY_LONG",
    "type": "ORDER_TYPE_LIMIT",
    "price": {"value": "0.55", "currency": "USD"},
    "quantity": 100,
    "tif": "TIME_IN_FORCE_GOOD_TILL_CANCEL",
})

When is Polymarket US open for trading?

Nearly around the clock. There is a recurring weekly maintenance window every Thursday from 6:00 to 8:00 AM ET, and trading can be paused without notice for emergency maintenance. Daily reporting runs as of 5:00 PM ET each business day. Build your bot to treat a maintenance window as expected downtime rather than an error.

How do you use Polymarket US alongside other venues?

Polymarket US prices many of the same events as Kalshi, Polymarket and other venues, so comparing them usually means a second and third integration. The Predictefy API serves Polymarket US next to Polymarket, Kalshi and 15+ other venues on one normalized schema, so one call can read the same event everywhere it trades. You can also trade Polymarket US through Predictefy with your own Key ID and Secret Key, which Predictefy uses for the one request that needs them and never stores.

Frequently Asked Questions

Does Polymarket US have an API?

Yes. Polymarket US has a public API at gateway.polymarket.us for market data, events, series, sports and search, which needs no key, and an authenticated API at api.polymarket.us for orders, portfolio, account data and WebSocket streams.

How do I get a Polymarket US API key?

Create an account in the Polymarket US app and complete identity verification, then sign in at polymarket.us/developer with the same method you used in the app and create a key. You get a Key ID and a Secret Key, and the secret is shown only once.

What are the Polymarket US API rate limits?

20 requests a second per API key across authenticated endpoints, and 20 requests a second per IP on public endpoints. Exceeding them returns a 429 error. Separately, orders not processed within 5 seconds during high latency are rejected with a "Global Rate Limit Exceeded" message, which is not an actual rate limit.

Is the Polymarket US API the same as the Polymarket API?

No. Polymarket US is a separate exchange with its own API, documentation and accounts. It uses Ed25519 API keys and US dollar balances, while global Polymarket uses wallets, CLOB credentials and pUSD on Polygon.

Does the Polymarket US API have a WebSocket?

Yes, two. The markets socket streams order books, lightweight prices and trades, and the private socket streams your orders, positions and balances. Both authenticate with the same signed headers as the REST API.

Is there a Polymarket US Python SDK?

Yes. Install it with pip install polymarket-us. It needs Python 3.10 or newer, supports sync and async use, and signs requests automatically. A TypeScript SDK with the same name is available on npm for Node.js 18 and newer.