GuidesResources

Errors

The shape of REST API error responses, what each status code means, and every error code with its fix.

Every REST API error has the same JSON shape, whatever the endpoint.

{
  "success": false,
  "code": 400,
  "error": "create_order_insufficient_collateral_allowance",
  "message": "Insufficient collateral: USDT allowance is less than the total bid amount.",
  "timestamp": "2026-11-04T20:37:19.030930831Z",
  "trace": "f81a7973a8d080f6723e5d3fb705604a"
}
FieldMeaning
successAlways false for an error.
codeThe HTTP status code.
errorA stable code to match on in your client. For a 400 it names the exact problem, like the codes below. For any other status it names the status, like unauthorized.
messageA description for people. It can carry details, such as the minimum a value has to reach. Do not match on it.
timestampWhen the error happened, in RFC 3339.
traceAn ID that identifies the request in our logs. Include it when you report a problem.

Status codes

StatuserrorMeaning
400A specific codeThe request is invalid. The error code says why.
401unauthorizedThe API key or JWT is missing, invalid or expired, or a JWT does not belong to the wallet the request acts for.
403forbiddenThe request is not allowed, for example from a restricted region or for a blocked wallet.
404not_foundThe resource does not exist.
429too_many_requestsYou went over a rate limit. See Rate limits.
500internal_server_errorSomething failed on our side. Retry later, and report it with the trace if it persists.
502bad_gatewayAn upstream service failed. Retry later.
503service_unavailableThe service or feature is unavailable for now. Retry later.

General codes

errorCauseFix
bad_requestThe request is invalid in a way no specific code covers.Read the message.
invalid_cursorThe after cursor is malformed.Pass the cursor from the previous page unchanged.
activity_invalid_inputThe input to an activity endpoint is invalid.Check the request against the endpoint's reference.
activity_lock_rejectedOne or more activity selections fail the activity's lock rules.Read the message for the selection that failed.
activity_state_conflictThe activity's current state does not allow the request.Check the activity's state first.

Order codes

These come from Create an order. Place orders explains each rule.

Order fields

errorCauseFix
create_order_invalid_numeric_valuepricePerShare, makerAmount or takerAmount is not an integer string. pricePerShare is in wei, so "0.4" is invalid.Send integers in wei, such as "400000000000000000" for 0.40.
create_order_invalid_fee_rate_bpsfeeRateBps is above 10000.Use the market's feeRateBps.
create_order_invalid_noncenonce is negative or too large.Use 0, as the SDK does.
create_order_invalid_slippage_bpsslippageBps is above 10000.Use a value from 0 to 10000.
create_order_invalid_signature_hexsignature is not valid hex, or is too long.Send the signature the SDK returns.
create_order_price_out_of_rangepricePerShare is not between 0 and 1 (exclusive).Use a price above 0 and below 1e18.
create_order_price_field_zeroThe amount that sets the price is zero: makerAmount for a buy, takerAmount for a sell.Compute the amounts with the SDK's order amount helpers.
create_order_amount_field_zeromakerAmount or takerAmount is zero.Use non-zero amounts.
create_order_price_field_precision_invalidFor a LIMIT order, the price-setting amount has digits below 1e10 wei.Compute the amounts with the SDK's getLimitOrderAmounts.
create_order_price_precision_too_highThe price has more decimals than the market's decimalPrecision.Round the price to decimalPrecision decimals.
create_order_limit_amounts_mismatchA LIMIT order's amounts do not match pricePerShare.Compute the amounts with getLimitOrderAmounts, and send the pricePerShare it returns.
create_order_market_amounts_mismatchA MARKET order's signed average price is more than 1% better for you than pricePerShare.Compute the amounts with the SDK's getMarketOrderAmounts.
create_order_slippage_non_marketslippageBps is set on a LIMIT order.Leave slippageBps out, or set it to 0.
create_order_min_order_value_not_metA buy is worth less than 1 USDT.Increase the order's size.
create_order_min_order_size_not_metA sell has fewer shares than the minimum: 1 share for a LIMIT order, 0.01 for a MARKET order.Increase the order's size.
create_order_expiry_too_soonThe order expires in less than 2 minutes.Set the expiration at least 2 minutes ahead.
create_order_expiry_too_farThe order expires after 2100-01-01.Use an earlier expiration.
create_order_maker_signer_mismatchmaker and signer differ.Set both to the wallet's address. For a Predict account, use the account's address.
create_order_fill_or_kill_not_supportedisFillOrKill is set on a LIMIT order.Use it only on MARKET orders.
create_order_post_only_not_supportedisPostOnly is set on a MARKET order.Use it only on LIMIT orders.
create_order_reserved_balance_policy_invalidreservedBalancePolicy is set on a LIMIT order.Use it only on MARKET orders.
create_order_fee_rate_too_lowfeeRateBps is below the market's fee, less any referral discount.Sign the market's feeRateBps. See Fees.
create_order_hash_mismatchThe hash you sent does not match the order.Send the hash the SDK computes, or leave it out.
create_order_duplicate_orderAn order with this hash already exists.Build a new order. The SDK gives each order a new salt.

Market and exchange state

errorCauseFix
create_order_market_token_not_foundNo market has this tokenId, or the market is hidden, as when its tradingStatus is CANCEL_ONLY.Use an outcome's onChainId from a market that is trading.
create_order_market_not_tradingThe market is paused or resolved.Check the market's status and tradingStatus.
create_order_trading_disabledMatching is off for the market, and only post-only LIMIT orders are accepted.Wait for tradingStatus to be OPEN, or send a post-only order.
create_order_market_orders_disabledMARKET orders are not accepted in the market right now.Use a LIMIT order, or wait.
create_order_exchange_pausedThe exchange contract is paused.Wait until trading resumes.
create_order_max_orders_per_market_exceededYour wallet has the maximum number of open LIMIT orders in this market.Remove some orders first. See Cancel orders.
create_order_unsupported_walletThe signing wallet is a smart contract the exchange does not support.Sign with an EOA or a Predict account.

Funds and approvals

The API checks your balance and allowance against the new order plus your other open orders on the same outcome and side in the same market.

errorCauseFix
create_order_insufficient_collateral_balanceYour USDT balance does not cover your open buys plus this one.Deposit USDT, or remove open buys.
create_order_insufficient_collateral_allowanceYour USDT allowance to the exchange does not cover your open buys plus this one.Set your approvals. See Approvals.
create_order_insufficient_shares_balanceYou hold fewer shares than your open sells plus this one.Sell fewer shares, or remove open sells.
create_order_exchange_not_approvedThe exchange is not approved to move your outcome tokens.Set your approvals.
create_order_neg_risk_adapter_not_approvedIn a negative-risk market, the adapter is not approved to move your outcome tokens.Set your approvals for negative-risk markets.

On-chain checks

The API asks the exchange contract whether the order is valid. These codes carry the contract's reason. If the contract's answer comes after the API has responded, the order is cancelled instead of rejected (see the note at the end of this page).

errorCauseFix
create_order_contract_invalid_signatureThe signature does not match the order and signer.Sign the order's typed data for the right exchange. Check isNegRisk and isYieldBearing.
create_order_contract_invalid_signature_lengthThe signature has the wrong length.Send the signature the SDK returns.
create_order_contract_order_expiredThe order has expired.Build a new order with a later expiration.
create_order_contract_fee_too_highfeeRateBps is above the exchange's cap of 1000.Sign the market's feeRateBps.
create_order_contract_invalid_token_idThe exchange does not know this token.Use an outcome's onChainId from the market.
create_order_contract_order_filled_or_cancelledThe order was already filled, or cancelled on-chain.Build a new order.
create_order_contract_invalid_nonceThe order's nonce does not match the wallet's nonce on the exchange.Sign the order with the wallet's current nonce on that exchange. It is 0, the SDK's default, unless the wallet has raised it on-chain.
create_order_contract_pausedThe exchange contract is paused.Wait until trading resumes.

A 201 from Create an order does not guarantee the order stays open. Some checks finish after the response. When one fails, the order is cancelled and you get a wallet event. See Order lifecycle.

On this page