Search this page for the exact string you got back. The same errors, grouped by cause with the reasoning, are on error responses.
| Shape |
When |
{"status":"err","response":"<string>"} |
the whole action failed: signature, account state, shape |
{"status":"ok","response":{"type":"order","data":{"statuses":[{"error":"<string>"}, ...]}}} |
an order or cancel batch: one status per item, in request order |
| a single error for the whole batch |
a deterministic pre-validation failure (empty batch, non-reduce-only TP/SL, price too far from the reference, some tick checks). Duplicate it n times if your callback expects one per order |
| HTTP 422 with plain text |
the body did not deserialise; read the text before parsing JSON |
| EVM transaction status 1, nothing happened |
a CoreWriter action was refused; the reason is only in the HyperCore record |
Source: docs (the official error list or API pages), measured (seen on chain) or SDK (in SDK code).
| Error string |
Source |
Cause |
Fix |
Page |
Price must be divisible by tick size. |
docs |
price breaks the 5 significant figure or decimal rule; also seen when a trailing zero made the signed price differ from the sent one |
round with floor(log10(p)) + 1 digits and strip trailing zeros before signing |
Precision |
Order must have minimum value of $10. |
docs |
order notional below the perp minimum |
size up |
Orders |
Order must have minimum value of 10 {quote_token}. |
docs |
spot notional below 10 units of the quote token |
size up |
Spot markets |
Insufficient margin to place order. |
docs |
not enough free collateral at the chosen leverage |
add margin, lower size or raise leverage |
Margin |
Reduce only order would increase position. |
docs |
the reduce-only order would open or add to a position |
resize, or drop r |
Order types |
Post only order would have immediately matched, bbo was {bbo}. |
docs |
ALO price crosses the book |
reprice behind the touch |
Order types |
Order could not immediately match against any resting orders. |
docs |
IOC found nothing to fill at its price |
widen the limit or use GTC |
Order types |
Invalid TP/SL price. |
docs |
trigger price on the wrong side of the market |
check the trigger against the mid |
TP/SL, TWAP and scale |
No liquidity available for market order. |
docs |
the book is empty on the side you hit |
wait, or rest a limit order |
Order types |
Order would increase open interest while open interest is capped |
docs |
the asset is at its open interest cap (covers position increase and flip) |
only reduce, or wait for the cap to lift |
Contract specifications |
Order rejected due to price more aggressive than oracle while at open interest cap |
docs |
at the cap, orders priced through the oracle are refused |
price at or behind the oracle |
Contract specifications |
Order would increase open interest too quickly |
docs |
open interest growth limit |
retry later, smaller |
Contract specifications |
(Spot-only) Order has insufficient spot balance to trade |
docs |
spot balance cannot cover the order |
fund the spot balance |
Spot markets |
Order price too far from oracle |
docs |
price outside the band around the oracle |
reprice nearer the oracle |
Oracles |
Order would cause position to exceed margin tier limit at current leverage |
docs |
the position would outgrow its margin tier at this leverage |
lower leverage or size |
Margin |
Order was never placed, already canceled, or filled. |
docs |
cancel for an oid that is not resting |
reconcile by cloid; treat as done |
Orders |
Price would cross book |
measured |
modify into a price that would take liquidity |
reprice, or send a new order |
Orders |
Invalid TWAP duration: 1 min(s) |
docs |
TWAP shorter than the minimum running time |
5 minutes or more |
TP/SL, TWAP and scale |
TWAP was never placed, already canceled, or filled. |
docs |
twapCancel for an unknown or finished TWAP |
treat as done |
TP/SL, TWAP and scale |
Action already expired |
docs |
the app did not see the action accepted within 15 s |
resend deliberately; beware duplicates |
Nonces, expiry and API wallets |
The outcome-market minimum order value is open: it was $10, and a reduction to $1 was anticipated. The docs list only the general $10 perp and 10-quote-token spot minimums.
orderStatus and historical orders report a status instead of the message; rejection statuses map one to one onto the errors above: tickRejected, minTradeNtlRejected, perpMarginRejected, reduceOnlyRejected, badAloPxRejected, iocCancelRejected, badTriggerPxRejected, marketOrderNoLiquidityRejected, positionIncreaseAtOpenInterestCapRejected, positionFlipAtOpenInterestCapRejected, tooAggressiveAtOpenInterestCapRejected, openInterestIncreaseRejected, insufficientSpotBalanceRejected, oracleRejected, perpMaxPositionRejected.
Cancellations the protocol makes on its own:
| Status |
Why the order was cancelled |
marginCanceled |
not enough margin to fill |
vaultWithdrawalCanceled |
a depositor withdrew from the vault |
openInterestCapCanceled |
too aggressive while open interest was at the cap |
selfTradeCanceled |
self-trade prevention |
reduceOnlyCanceled |
a reduce-only order no longer reduces |
siblingFilledCanceled |
the other leg of a TP/SL pair filled |
delistedCanceled |
the asset was delisted |
liquidatedCanceled |
the account was liquidated |
scheduledCancel |
the dead man’s switch fired |
| Error string |
Source |
Cause |
Fix |
Page |
L1 error: User or API Wallet 0x... does not exist. |
docs, measured |
the signature recovered a different address. Almost always serialisation: key order, trailing zeros, a checksummed address, the wrong signing scheme, a map signed as an object. The address changes with the input |
log the exact bytes hashed and compare with a golden vector |
Debugging |
Must deposit before performing actions. User: 0x... |
docs, measured |
either a wrong signature as above, or a genuinely unfunded account. If the payload was a probe, it proves the shape parsed |
check the recovered address against yours; fund the account |
Debugging |
Unable to recover signer. |
measured |
the shape parsed but the signature is invalid, for example a dummy signature in a probe |
sign properly |
Debugging |
HTTP 422 Failed to deserialize the JSON body into the target type |
measured |
wrong wire shape, for example a missing key or an omitted nullable key |
send nullable keys as explicit null; check the current shape |
Debugging |
Invalid multi-sig outer signer |
measured |
leading zeros in inner r or s, or a checksummed address; about 1 in 4 submissions failed before the fix, 24 of 24 passed after |
minimal hex for r and s; lowercase addresses |
Multi-sig actions |
Invalid multi-sig inner signer |
measured on testnet |
a user-signed inner action (such as cWithdraw) signed as an L1 action |
sign the inner action as typed data with payloadMultiSigUser and outerSigner |
Multi-sig actions |
Multi-sig required |
measured on testnet |
the original key of a converted account acted alone |
send through multiSig |
Multi-sig accounts |
Multi-sig threshold not met |
measured on testnet |
fewer signatures than the threshold |
collect the quorum before submitting |
Multi-sig accounts |
| Error string |
Source |
Cause |
Fix |
Page |
Action disabled when unified account is active |
measured |
usdClassTransfer, spotSend or usdSend on a unified or portfolio margin account |
use sendAsset |
Account modes |
Abstraction transition not allowed |
measured on testnet |
switching back after enabling unified account (observed in testing) |
plan the mode before funding |
Account modes |
Cannot disable unified account with open positions, open orders, or active TWAP orders |
measured |
changing mode with open exposure |
flatten first |
Account modes |
Portfolio margin requires account value of $10000 or total volume of $5000000 |
measured |
below the eligibility bar. One measurement suggests supplied balances do not count toward account value (unconfirmed) |
add equity or volume |
Portfolio margin |
Invalid token |
measured |
HyperCore to HyperEVM sendAsset with destinationDex: "" |
use "spot" |
Transfers |
Insufficient USDC or HYPE balance for token transfer gas |
measured on testnet |
the crossing fee (200k gas at the next base fee) cannot be paid from the HyperCore balance, for example when sending 100% |
leave a reserve on HyperCore |
Moving assets |
Invalid number of decimals: <amount> |
measured |
HyperCore to HyperEVM amount not a multiple of 10^abs(evmExtraWeiDecimals); for USDC, wei % 100 must be 0. 5 of 5 cases |
floor before sending |
Moving assets |
| Error string |
Source |
Cause |
Fix |
Page |
Manual borrow/lend not allowed with portfolio margin |
measured |
borrowLend or CoreWriter action 15 from a portfolio margin account; enforced for CoreWriter too |
use Standard or Unified mode |
Borrowing and lending |
Borrow/Lend error: Insufficient spot balance for operation |
measured |
the operation needs more spot balance than the account holds |
size to the spot balance |
Borrowing and lending |
| Error string |
Source |
Cause |
Fix |
Page |
Insufficient stake |
measured on testnet |
activateOutcomeDeployer without the requirement in the account’s own staking balance (delegated plus undelegated) |
stake more to the deployer account itself |
Becoming an outcome deployer |
Deployer cannot have staking link |
measured on testnet |
the deployer account is linked to a staking account holding the stake; someone else’s stake cannot be the bond |
stake from the deployer account |
Becoming an outcome deployer |
Insufficient balance to withdraw from CStaking |
measured on testnet |
cWithdraw would take stake below the escrowed requirement |
withdraw only the headroom |
Deployer economics and risk |
Deployer fee scale cannot be negative or greater than 10. |
docs |
HIP-4 deployerFeeScale outside 0 to 10 |
use a decimal string in range |
Deployer economics and risk |
Invalid perp deployer |
measured |
another dex’s deployer acting on an allowlisted dex |
act from that dex’s deployer |
Operating a perp dex |
Error deploying perp: Collateral asset not supported |
measured on testnet |
registerAsset2 with a collateral token testnet did not accept for new dexes (5 tokens tried) |
choose an accepted collateral token |
Deploying a perp dex |
Invalid perp DEX |
measured on testnet |
seen on testnet for collateralToken: 0; cause unresolved after a sweep of every other field |
none known |
Deploying a perp dex |
Two deployer rejections have no known string: a uDecimal keyword value with a trailing zero ("95.000", not "95") signs cleanly but is refused on submission, and the old spotDeploy.outcome shape is refused on testnet. A rejected HIP-4 deploy still uses one of the day’s deploys.
| Error or symptom |
Source |
Cause |
Fix |
Page |
| EVM status 1, no effect on HyperCore |
measured |
every CoreWriter refusal is silent |
confirm from a precompile in a later block, or the explorer’s userDetails error field |
CoreWriter |
| Action 17 silently dropped |
docs, measured |
a non-zero unused field |
zero question for split and merge, outcome for merge question |
CoreWriter action reference |
| CoreWriter action rejected for a new contract |
docs |
the sender was not a HyperCore account before the EVM block was built |
activate in an earlier block |
Execution order |
InvalidTransaction(PrecompileOutOfGas(50000000)) |
measured |
invalid precompile input, or any explicit block number on an archive node; all forwarded gas is consumed |
cap gas per call; read at latest only |
Precompiles |
PrecompileError |
measured |
a live precompile refused the input |
check the index type and value |
Precompiles |
empty 0x with success |
measured |
the address is not an assigned precompile (0x815 and up) |
use 0x800 to 0x814 |
Precompile reference |
0x811 reverts |
measured |
no borrow or lend record exists yet for that account and token |
guard the call; treat as zero |
Precompile reference |
| Error or symptom |
Source |
Cause |
Fix |
Page |
too many pending post requests id=N |
SDK |
more than 100 posts in flight across your connections |
queue posts client side |
WebSocket |
an error channel frame |
SDK |
a dead subscription |
resubscribe |
WebSocket |
| HTTP 429 |
measured |
IP weight exhausted (1,200 per minute). No Retry-After header is sent |
back off with jitter; move reads to WebSocket |
Rate limits |
| one request per 10 s accepted |
docs |
address-based limit hit |
trade more, or buy weight with reserveRequestWeight |
Rate limits |
| timeouts, 5xx |
measured |
outcome unknown; for deploys there is no receipt id |
record intent first; reconcile before retrying |
Error responses |
To probe a shape safely, see Debugging signatures and wire shapes; for what each action expects, the Exchange action reference.