Skip to main content

Application Layer Messages

Execution Reports (35=8) and Order Cancel Reject (35=9)

For Execution Reports (i.e. when a NewOrderSingle is rejected), the reason code is provided in OrdRejReason (Tag 103). For Order Cancel Reject messages (i.e. when a cancel or cancel/replace is rejected), the reason code is provided in CxlRejReason (Tag 102). Note that the FIX protocol specifies different enumerations for OrdRejReason vs CxlRejReason. As such, the exact same error condition may produce a different error code in an execution report versus an order cancel reject message.
Global Rate Limit Exceeded is a latency stopgap, not a rate limit. During periods of increased latency, an order that has been received but not processed within 5 seconds is rejected with the text Global Rate Limit Exceeded to protect you from a bad fill at a stale price. This is not an actual rate limit — do not throttle your traffic in response. It applies to new orders and cancel/replace modifications, but not to pure cancels. You can always cancel an order before it has been acknowledged or processed. See Rate Limits.

Market Data Request Reject (35=Y)

There are no cases where the FIX Market Data Gateway will send this message. Rejections on the FIX MD Gateway will be either 35=3 or 35=j messages.

Session Layer Messages

New Message Reject (35=3)

A session level reject is sent when the FIX session cannot process an incoming message. RefSeqNum(45) will contain the MsgSeqNum(34) of the message that triggered the reject. SessionRejectReason(373) and Text(58) will contain an error code and description, respectively.

Business Message Reject (35=j)

Below is a list of Business Message Reject (35=j) error strings produced by the EP3 FIX gateways.

Common Connection and Order Issues

1. Logon Rejected Immediately

Cause: SenderSubID (50) sent on Logon message Fix: Do not send tag 50 on Logon (35=A). Only include SenderSubID on application messages (order entry, cancel, etc.), not on session management messages.

2. No Connection / TCP Reset

Cause: Source IP not allowlisted, or connecting to wrong environment (preprod vs prod) Fix: Confirm your static egress IP is whitelisted and verify you’re connecting to the correct environment with Polymarket.

3. Order Rejected: Unknown Account

Cause: Missing or invalid Account (1) Fix: Use account IDs explicitly provided by Polymarket during onboarding. Verify the Account tag value matches your assigned account.

4. Order Rejected: Not Authorized

Cause: Trader (SenderSubID) not permissioned for the specified account Fix: Confirm trader-to-account mapping with Polymarket. Ensure the SenderSubID has permissions for the Account you’re trading on.

5. Order Rejected: Invalid Price Increment

Cause: Price violates tick size for the instrument Fix: Fetch MinPriceIncrement (969) from SecurityList (35=y) and ensure your order price respects the tick size increment.

6. Order Rejected: Incorrect Quantity

Cause: Quantity violates lot size or minimum/maximum quantity rules Fix: Fetch MinTradeVol (562) from SecurityList (35=y). Ensure quantity respects the lot size increment and falls within min/max limits.

7. Post-Only Order Rejected

Cause: ExecInst=6 (post-only) would immediately match against existing orders Fix: Adjust your limit price so it does not cross the current market, or remove the post-only instruction.

8. Order Accepted Then Immediately Canceled

Cause: Self-match prevention triggered Fix: Check your SelfMatchPreventionID (7928) and verify the self-match instruction (8000=O or N). Orders from the same SMP ID that would match are canceled.

9. Market Data Not Received

Cause: Attempted to subscribe on order-entry session, or no MarketDataRequest (35=V) sent Fix: Use the dedicated market data FIX session and send a valid MarketDataRequest subscription message.

10. Sequence Number / Resend Loop

Cause: MsgSeqNum mismatch after restart, creating continuous resend requests Fix: Restart your session with ResetSeqNumFlag (141=Y) on Logon to reset sequence numbers to 1, or manually resync sequence numbers with your FIX engine.