Errors and refusal codes
Every status a write can answer, the order refusal codes, the agent refusal codes and the deposit outcomes — key your program on the code.
A refusal always carries a machine-readable code. The text beside it is for people and may change; the code does not.
Statuses
| Status | Meaning |
|---|---|
202 | received ("status": "submitted"); read the state back to see it applied |
400 | refused: the body is malformed, or the operation breaks a rule (code says which) |
401, 403 | the signature does not recover an allowed signer, or the signer is not allowed this operation |
404 | no such pair, order, agent or route |
409 | the nonce was used already, or an earlier operation is still pending |
429 | too many requests or the intake is full; wait for Retry-After and send again |
5xx | the node could not answer; try again |
A refused order answers:
{"success": false, "status": "refused", "code": "price_band", "meaning": "…", "error": "…"}In a batch, each action answers on its own: accepted, refused or will_be_refused, with its code.
Order refusals
| Code | Why |
|---|---|
min_notional | the order is worth less than the smallest order value (limits) |
max_notional | the order is worth more than the largest single order allowed |
no_price | the market has no committed price yet, so a market order cannot be valued |
slippage | the price has already moved past the cap the order was signed with |
price_band | a limit price too far through the mark on the side that would trade at once |
tick | the price is not a multiple of the market's price step |
lot | the size is not a multiple of the market's size step |
leverage | the leverage is zero or above the market's maximum |
too_many_open_orders | the account already has the most open orders allowed |
oi_cap | the order would take the market past its open-interest cap (closing orders are never refused) |
rate_limited | the account's request allowance is used up (cancels are always allowed) |
rate_burst | too many orders from one address in one block |
agent_refused | the agent that signed it may not place it — see reason and the agent refusals |
not_active | this kind of order is not active on this network |
Write refusals
| Code | Why |
|---|---|
invalid_body | a field is missing or malformed |
batch_size | a batch has no action or more than the most allowed |
bad_signature | the signature does not recover an allowed signer |
unknown_order | the order to cancel or modify does not exist |
insufficient_balance | the free balance does not cover the order's margin |
mempool_full | the intake is full; send again |
Agent refusals
An order signed by an agent and refused by its policy answers 403 with "code": "agent_refused" and one of these
reasons; the refusal is also recorded under GET /events/agent/{agent}. The meanings are the network's own, read from
its spec:
| Reason | Meaning (as the network publishes it) |
|---|---|
registration_not_live | The agent's registration is revoked or expired. |
policy_expired | The agent's policy has expired. |
policy_disabled | The owner disabled the agent's policy. |
no_policy | The agent has no policy, so every action is refused. |
agents_paused | All agents are paused on this network. |
agent_mode_off | The agent's trading mode is off. |
capability_not_granted | The policy does not allow this kind of action. |
market_not_allowed | The policy does not allow this market. |
outside_active_window | Outside the policy's active hours (UTC). |
rate_limit | The agent used all actions allowed in its window. |
locked_reduce_only | The agent is locked to reduce-only (a limit was reached). |
reduce_only_or_side | Only reducing orders, or only the policy's side, are allowed. |
max_order | The order is larger than the policy allows. |
max_position | The position would exceed the policy's maximum. |
max_total_exposure | The agent's total exposure would exceed the policy's maximum. |
max_leverage | The leverage is above the policy's maximum. |
daily_loss_limit | The agent's daily loss limit is reached. |
daily_fee_cap | The agent's daily fee cap is reached. |
price_outside_band | The price is outside the policy's band around the oracle price. |
oracle_unavailable | The market's oracle price is missing, stale or its breaker is tripped. |
not_agents_order | The order or TWAP was not placed by this agent. |
other | Another agent check refused the action. |
Deposit outcomes
GET /bridge/v4/deposits/{address} gives each deposit a status — pending, credited, waiting or
not accepted — and, when it is not credited, a reason:
| Reason | What it means |
|---|---|
waiting | deposits are closed or at a limit; it is credited when they reopen, from the same transfer |
below_minimum | smaller than the smallest deposit; it is owed back to the address that sent it |
above_per_deposit_limit | larger than one deposit may be; owed back |
not_completed | the deposit call failed; owed back |
stranded | the transfer could not be read; it is owed to no one until it is recovered |
rescued | recovered; the amount is owed to the address named in claim |
other | returned; claim it on Arbitrum by the address it was returned to |
An amount owed back is claimed on Arbitrum by the address it is owed to.
JSON-RPC
The EVM lane's error codes are on the JSON-RPC page.
Network facts last checked against the network 2026-10-22 13:00:37 UTC · mainnet spec v28 · testnet spec v8