Skip to main content
The API returns descriptive error messages when a request is rejected. Use the HTTP status and response body to decide whether to retry or correct the request.

Service Unavailable

The API returns 503 Service Unavailable for temporary overload or a response timeout on operations that support safe retries.

Transient Overload (503)

A 503 does not prove that the request did not execute. A load-shed rejection happens before dispatch, but an engine response timeout can occur after the request was admitted.
  • Honor Retry-After when present; its value is a delay in whole seconds.
  • Batch endpoints return a one-element array for a whole-request rejection.
  • A 500 with internal_error can indicate an unexpected failure or an indeterminate outcome. Follow the operation’s recovery guidance before retrying.

Recover an Isolated-Margin Adjustment

For PATCH /v1/trade/margin, amt is a signed delta, not a replacement balance. After a 503, retry only the exact original signed payload. A newly signed request is a separate adjustment and can apply the delta again. A signature_already_used rejection means the original signed request was ingested; it does not confirm that the adjustment succeeded. Its decision may still be pending or may have rejected the adjustment. GET /v1/account/portfolio reports committed state without a per-request outcome. Neither an unchanged balance nor a matching delta proves what happened: the request may still be pending, or another adjustment may explain the change. Do not sign another adjustment for the same account until the original outcome has been confirmed out of band. No public endpoint currently reports that request’s terminal outcome.

Order Placement Errors

Modify Order Errors

Modify Order returns one result per requested order. A rejected modification does not change the live order, although a separately processed fill or cancellation can still change its state. Shared account, instrument, margin, position, reduce-only, and rate-limit errors can also reject a modification under the same conditions as a new order.

Order Cancellation Errors

A cancel sent while an order is awaiting risk checks succeeds immediately, unless the account is being liquidated. The canceled order will not enter the order book. A cancel sent while the order’s accept is still on its way to the matching engine does not fail: the exchange holds one such cancel, applies it as soon as the accept completes, and answers with the final outcome — success once the order is removed, or order_already_terminal if the order filled or was rejected first. If the exchange disables this behavior, is in cancel-only maintenance mode, or the account is being liquidated, such a cancel returns order_in_flight instead.

Auto-Cancel Errors

Returned when arming the auto-cancel switch with PATCH /v1/trade/auto-cancel. Disarming skips these checks and is always allowed. A deadline already in the past is rejected earlier with a plain 400 message. auto_cancel_in_flight is transient. Arming succeeds once the engine finishes the earlier cancellation.

Update Leverage Errors

Returned when a leverage or margin-mode update is rejected. Leverage must be positive; a zero leverage is rejected earlier with a plain 400 validation message. A disabled instrument is not rejected merely because it is disabled.

Isolated Margin Adjustment Errors

These stable identifiers are returned when an isolated margin adjustment is rejected after sequencing. Gateway signature validation can reject a stale or future-skewed timestamp earlier as invalid signature; that request never reaches sequencing.