Polymarket API reference / CLOB API
POST/order

Post a new order

Creates a new order in the order book

Base URL
https://clob.polymarket.com
Auth
L2 API credentials (key, secret, passphrase)POLY_API_KEY, POLY_ADDRESS, POLY_SIGNATURE, POLY_PASSPHRASE, POLY_TIMESTAMP
Rate limit
5,000 req / 10s (500 per second)sustained 120,000 req / 10 min
Limit applies to
POST /order

Things to know

Trading endpoints carry two Cloudflare limits: a burst of 5,000 req / 10s and a sustained 120,000 req / 10 min. Separate per-signer token buckets, sized by 30-day volume, apply on top.

Request body

FieldTypeRequiredDescription
orderobjectyesOrder payload submitted to the CLOB API. In CLOB V2, `expiration` remains in the POST /order wire body for GTD/order-expiry handling, but it is not part of the EIP-712 signed order struct.
ownerstringyesUUID of the API key owner
orderTypestringnoTime in force
deferExecbooleannoWhether to defer execution
postOnlybooleannoWhether the order must rest on the book and not match immediately. Only supported for GTC and GTD orders.

Example

curl -X POST "https://clob.polymarket.com/order" \
  -H "Content-Type: application/json" \
  -H "POLY_API_KEY: $POLY_API_KEY" \
  -H "POLY_ADDRESS: $POLY_ADDRESS" \
  -H "POLY_SIGNATURE: $POLY_SIGNATURE" \
  -H "POLY_PASSPHRASE: $POLY_PASSPHRASE" \
  -H "POLY_TIMESTAMP: $POLY_TIMESTAMP" \
  -d '{
  "order": {},
  "owner": "<owner>"
}'

L2 requests are signed with HMAC-SHA256 using your API secret, and the timestamp is part of the signature, so keep the machine's clock accurate. A missing credential or a stale signature both come back as Unauthorized/Invalid api key. The Python SDK signs for you.

Response fields

FieldTypeDescription
successbooleanWhether the order was successfully processed
orderIDstringUnique identifier for the order (order hash)
statusstringStatus of the order after processing
makingAmountstringAmount the maker is providing in fixed-math with 6 decimals
takingAmountstringAmount the taker is providing in fixed-math with 6 decimals
transactionsHashesstring[]Array of transaction hashes (present when status is 'matched')
tradeIDsstring[]Array of trade IDs (present when status is 'matched')
errorMsgstringError message (empty on success)

Responses

StatusMeaning
200Order successfully processed
400Bad request - Invalid order payload or validation error
401Unauthorized - Invalid API key or authentication failed
500Internal server error
503Service unavailable - Trading disabled or cancel-only mode

Errors this endpoint returns

Related endpoints

Polymarket's API serves current state only, so it cannot show what a market's book looked like after it resolved. PolyTest records Up/Down markets while they run and keeps the snapshots. Try it free, or read the full rate limit reference.

From Polymarket's published OpenAPI spec and rate-limit tables, synced 2026-10-04.