Announcements
Matching engine changes — planned restarts, updates, and maintenance windows — are announced before they happen in these channels:Telegram
Join the Polymarket Trading APIs channel for real-time announcements.
Discord
Join the #trading-apis channel in the Polymarket Discord.
Handling HTTP 425
During a restart window, the CLOB API returns HTTP 425 (Too Early) on all order-related endpoints. This tells your client that the matching engine is restarting and will be back shortly. After every restart, the matching engine enters post-only mode for 2 minutes. During this period, cancels are accepted and new orders must usepostOnly: true; non-post-only orders are rejected.
Recommended Retry Strategy
1
Detect 425
When you receive an HTTP
425 response, the matching engine is restarting. Do not treat this as a permanent error.2
Back off and retry
Wait and retry with exponential backoff. Start at 1–2 seconds and increase the
interval on each retry.
3
Handle post-only mode
Once
425 responses stop, the engine is back online but remains in post-only mode for 2 minutes. During that period, only cancels and orders with postOnly: true are accepted.Code Examples
Retry an eligible post-only limit order when the matching engine returns425:
- TypeScript
- Python
Given a
SecureClient, call placeLimitOrder() again after
each backoff interval:TypeScript
Restricted Trading Modes
During restricted trading modes, order placement behavior changes forPOST /order and POST /orders. Cancel endpoints continue to accept cancels unless trading is fully disabled.
Cancel-Only Mode
In cancel-only mode, new orders are rejected, but cancel requests are still accepted.POST /order and POST /orders return 503:
Post-Only Mode
After every restart, the matching engine enters post-only mode for 2 minutes. Cancel requests are accepted and new orders must usepostOnly: true. Non-post-only orders are rejected.
POST /order returns 503 with a retry delay in both the response body and the Retry-After HTTP header:
POST /orders returns per-order errors for non-post-only orders in the batch:
postOnly: true.
Best Practices
- Subscribe to announcement channels — get notified before restarts happen so you can prepare
- Handle 425 gracefully — treat it as a temporary condition, not an error; your retry logic should resume automatically
- Handle 503 mode responses on order placement — cancel-only and post-only responses require changing order flow, not blind retrying
- Avoid aggressive retries — the engine needs time to reload orderbooks; rapid-fire retries won’t speed things up and may hit rate limits once the engine is back
- Log restart events — track when your client encounters 425s to correlate with announced maintenance windows