The Polymarket matching engine undergoes restarts for maintenance and upgrades. This page covers how to detect and handle downtime, the post-restart post-only period, and where to get advance notice of changes.Documentation Index
Fetch the complete documentation index at: https://docs.polymarket.com/llms.txt
Use this file to discover all available pages before exploring further.
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
Detect 425
When you receive an HTTP
425 response, the matching engine is restarting. Do not treat this as a permanent error.Back off and retry
Wait and retry with exponential backoff. Start at 1–2 seconds and increase the interval on each retry.
Code Examples
Check the HTTP status code on responses to the CLOB API and retry on425:
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