Skip to main content
DerivaDEX errors can appear in three places: the HTTP response to a private request, a failed WebSocket subscribe or unsubscribe message, or a rejection in the realtime account feeds.

Where errors appear

Use this table to identify the source of the error before looking up the code itself.
Error appears inWhere it appearsWhat it means
HTTP responseHTTP response from POST /v2/requestThe request failed before the operator accepted it, or before the client received a final answer.
WebSocket controlACKNOWLEDGE.result.errorA subscribe or unsubscribe command failed. The WebSocket connection itself can still be healthy.
Realtime rejectionORDER_UPDATE, STRATEGY_UPDATE, or TRADER_UPDATE rejection fieldsThe connection stayed up, but a specific order, withdrawal, or trader-level action was rejected later in processing.

HTTP error codes

These are the public error_reason values returned by the private request endpoint, along with the right response for each one.
Error reasonStatusMeaningSend the same request again?What to do
InvalidRequestPayload400The request body could not be parsed as a valid DerivaDEX request. Missing replay-window fields, half-filled replay-window fields, or other malformed input also return this code.NoFix the request contents, then sign and encrypt it again.
SignerNotFound401Signature recovery succeeded, but the recovered signer is not a recognized trader.NoSign with the correct trader wallet or delegated session key.
Forbidden403The request was understood but denied by operator policy. This includes delegated-session expiry and ACL violations.NoFix the authorization state before trying again.
KycNotFound404Required KYC state is missing or expired.NoResolve KYC state before retrying.
IllegalNonce412Replay protection rejected the request nonce because it was stale, duplicated, or otherwise invalid for the current request window.NoBuild a fresh request with new replay fields instead of sending the same one again.
NotAcceptingRequests421The operator is temporarily unable to take this kind of request. This can happen during leader changes, readiness changes, or other short-lived request-path transitions.SometimesPause, check readiness, then retry a limited number of times.
InvalidEncryption422The operator could not decrypt the encrypted payload bytes.NoRe-encrypt the exact signed payload with the current operator key.
SafetyFailure422Request validation rejected the order or account action because it broke a trading, balance, or withdrawal rule.NoFix the request or the account state before retrying.
RateLimit429The authenticated signer exceeded the current request quota.YesSlow down, wait, and try again.
InternalServerError500An internal server fault prevented a final answer.Only after checking the resultCheck whether the request already took effect before sending it again.
ServiceUnavailable503A required dependency was not ready. Today this includes MarketPriceNotAvailable.SometimesWait briefly, then try again. If it keeps happening, check whether price data or another dependency is missing.

Error response format

Every HTTP error response uses the same three fields.
FieldTypeMeaning
error_reasonenumThe main error code. Read this first.
safety_failureenum or nullPresent only when error_reason is SafetyFailure.
messagestringHuman-readable detail for logs and debugging. Useful context, but error_reason is the field to branch on in code.

Safety-failure codes

These safety_failure values appear only alongside 422 SafetyFailure, except for MarketPriceNotAvailable, which currently maps to 503 ServiceUnavailable.

Trader and strategy state

These codes mean the request referred to a trader or strategy state the operator could not use.
VariantMeaning
TraderNotFoundTrader address was not found in verified state.
NoStrategiesThe trader has no strategies.
StrategyNotFoundThe specified strategy does not exist for the trader.
OrderNotFoundThe referenced order hash was not found.
InsuranceFundContributionNotFoundThe referenced insurance-fund contribution was not found.
AccessDeniedTrader access is denied.
UnsupportedTraderUpdateThe requested trader update type is not supported.

Order details and market rules

These codes mean the request itself broke a market rule before the order could move forward.
VariantMeaning
SignatureRecoveryMismatchEIP-712 signature recovery did not match the intended trader identity.
OrderPriceNegOrder price was negative.
OrderAmountZeroNegOrder amount was zero or negative.
OrderAmountNotMultipleOfMinOrderSizeOrder amount was not a valid multiple of the minimum order size.
OrderTypeIncompatibleWithPriceOrder type and price fields were inconsistent.
PriceNotMultipleOfTickSizePrice was not a valid multiple of the market tick size.
UnsupportedMarketThe symbol is not a supported market.
UnsupportedCurrencyThe request used an unsupported currency. Public trading flows require USDC.
MaxOrderNotionalBreachedOrder notional exceeded the market maximum.
MaxTakerPriceDeviationBreachedThe order would breach the taker price-deviation guard.
TooManyOrdersThe strategy already has too many open orders for that market.
CancelNoLiquidityForMarketThere was no open liquidity to cancel for the requested symbol.

Margin, collateral, and withdrawal checks

These codes mean the request itself was well-formed, but the trader’s account did not meet a balance or solvency rule.
VariantMeaning
NotEnoughCollateralCollateral was below the required minimum for the requested action.
OMFLessThanIMFThe post-trade open margin fraction would fall below the initial margin requirement.
MaxWithdrawAmountBreachedThe collateral withdrawal exceeded the allowed maximum.
MaxDDXWithdrawAmountBreachedThe DDX withdrawal exceeded the allowed maximum.
TooMuchCollateralToWithdrawDDXThe requested DDX withdrawal would violate the collateral cap that applies after the withdrawal.
MaxInsuranceFundWithdrawBreachedThe insurance-fund withdrawal exceeded the allowed maximum.
WithdrawAmountZeroNegCollateral withdrawal amount was zero or negative.
WithdrawDDXAmountZeroNegDDX withdrawal amount was zero or negative.
WithdrawInsuranceFundZeroNegInsurance-fund withdrawal amount was zero or negative.

Mark-price availability

This code means the operator did not have the required mark price yet. It does not mean the request itself was malformed.
VariantMeaning
MarketPriceNotAvailableMark price was unavailable for the requested symbol. The current runtime returns this as 503 ServiceUnavailable.

Rejections in realtime feeds

Rejections in realtime feeds do not use the HTTP error_reason fields. They appear inside the feed payload itself.
Rejection appears inWhere to read itMeaningNext lookup
Subscription controlACKNOWLEDGE.result.errorA subscribe or unsubscribe command failed.Realtime Channels
Order rejectionORDER_UPDATE.orderRejection or ORDER_UPDATE.cancelRejectionAn order, cancel, or modify action was rejected after the request was accepted.Order and Account Event Reference
Strategy rejectionSTRATEGY_UPDATE.withdrawRejectionA collateral or insurance-fund withdrawal action was rejected.Order and Account Event Reference
Trader rejectionTRADER_UPDATE.withdrawDDXRejectionA trader-level DDX withdrawal action was rejected.Order and Account Event Reference
Last modified on May 1, 2026