These errors can occur on **any authenticated endpoint**.
<ResponseField name="401" type="Unauthorized">
`Unauthorized/Invalid api key` — Your API key is missing, expired, or invalid. Ensure you're sending all required [authentication headers](/trading/overview#authentication).
</ResponseField>
<ResponseField name="401" type="Unauthorized">
`Invalid L1 Request headers` — Your L1 authentication headers (HMAC signature) are malformed or the signature doesn't match. See [Authentication](/api-reference/authentication).
`Trading is currently cancel-only. New orders are not accepted, but cancels are allowed.` — The exchange is in cancel-only mode. You can cancel existing orders but cannot place new ones.
</ResponseField>
<ResponseField name="429" type="Too Many Requests">
`Too Many Requests` — You've exceeded the [rate limit](/api-reference/rate-limits). Back off and retry with exponential backoff.
`Too many orders in payload: {N}, max allowed: {M}` — The batch contains more orders than the maximum allowed per request.
</ResponseField>
Per-order errors are returned in the `200` response array, with individual error messages for each failed order.
***
## Order Processing Errors
These errors are returned when an order passes initial validation but fails during processing. They appear in the response body of `POST /order` and `POST /orders`.
<ResponseField name="400" type="Bad Request">
`invalid post-only order: order crosses book` — A post-only (maker) order would immediately match. Adjust the price so it rests on the book.
</ResponseField>
<ResponseField name="400" type="Bad Request">
`order {id} is invalid. Price ({price}) breaks minimum tick size rule: {tick}` — The order price doesn't align with the market's tick size. Use [`GET /tick-size`](/api-reference/clob#get-tick-size) to check the valid tick size.
</ResponseField>
<ResponseField name="400" type="Bad Request">
`order {id} is invalid. Size ({size}) lower than the minimum: {min}` — The order size is below the market minimum.
`not enough balance / allowance` — Insufficient pUSD balance or token allowance. Check your balance with [`GET /balance-allowance`](/api-reference/clob#get-balance-allowance) and approve the exchange contract if needed.
`invalid expiration` — The order expiration timestamp is in the past or invalid.
</ResponseField>
<ResponseField name="400" type="Bad Request">
`order canceled in the CTF exchange contract`
</ResponseField>
<ResponseField name="400" type="Bad Request">
`order match delayed due to market conditions`
</ResponseField>
<ResponseField name="400" type="Bad Request">
`order couldn't be fully filled. FOK orders are fully filled or killed.` — A Fill-or-Kill order could not be completely filled by available liquidity. The entire order is rejected.
</ResponseField>
<ResponseField name="400" type="Bad Request">
`no orders found to match with FAK order. FAK orders are partially filled or killed if no match is found.` — A Fill-and-Kill order found no matching orders at all. At least one match is required.
</ResponseField>
<ResponseField name="400" type="Bad Request">
`the market is not yet ready to process new orders`
</ResponseField>
***
## Matching Engine Errors
Internal matching engine errors that may surface during order execution.
<ResponseField name="425" type="Too Early">
The matching engine is restarting. Retry with exponential backoff. See [Matching Engine](/trading/matching-engine) for details on restart schedule and handling.
</ResponseField>
<ResponseField name="500" type="Internal Server Error">
`there are no matching orders`
</ResponseField>
<ResponseField name="500" type="Internal Server Error">
`FOK orders are filled or killed` — A Fill-or-Kill order could not be fully satisfied.
</ResponseField>
<ResponseField name="500" type="Internal Server Error">
`the trade contains rounding issues`
</ResponseField>
<ResponseField name="500" type="Internal Server Error">
`the price of the taker's order has a discrepancy greater than allowed with the worst maker order`
| `400` | Bad Request | Invalid parameters, malformed payload, business logic violation |
| `401` | Unauthorized | Missing or invalid API key, bad HMAC signature, expired timestamp |
| `404` | Not Found | Market doesn't exist, order not found, token ID not recognized |
| `425` | Too Early | Matching engine is restarting — retry with backoff. See [Matching Engine](/trading/matching-engine) |
| `429` | Too Many Requests | Rate limit exceeded — implement exponential backoff |
| `500` | Internal Server Error | Unexpected server error — retry with backoff |
| `503` | Service Unavailable | Exchange paused or in cancel-only mode |
<Note>
The CLOB API has an internal override: any error message containing `"not found"` returns `404`, `"unauthorized"` returns `401`, and `"context canceled"` returns `400`, regardless of the original status code.