Errors
Every failure is a JSON object carrying a machine-readable error code, which never changes meaning, and a message written for people. Branch on the code; log or display the message.
{ "error": "insufficient_balance", "message": "wallet holds 0 tokens" }
Your request
| Code | HTTP | Meaning |
|---|---|---|
invalid_request | 400 | Something required is absent, or a field has the wrong shape. |
invalid_address | 400 | An address field (token, from, wallet) does not parse as one. |
invalid_amount | 400 | amount is zero, negative or not numeric, or a percentage was given on a buy. |
invalid_action | 400 | Only "buy" and "sell" are accepted. |
token_not_found | 404 | The address is not an Argus or LIFT token, and no Uniswap pool on Arc holds it against USDC. Check you copied the token, not a pool. |
Trading
| Code | HTTP | Meaning |
|---|---|---|
insufficient_funds | 400 | Not enough USDC in from for the trade plus gas. The message states the balance and the requirement side by side. It has to be USDC on Arc: USDC on Ethereum, Base or Solana does not count until it is bridged. |
insufficient_balance | 400 | Selling more tokens than the wallet holds. "100%" sells everything. |
slippage_exceeded | 400 | Between quoting and building, the price moved past what slippage allows. Re-request; on a volatile token, allow more. |
amount_too_small | 400 | So little that the swap would return nothing. Increase amount. |
deadline_passed | 400 | The transaction's deadline expired before it was sent. Request again and send promptly. |
Sending
| Code | HTTP | Meaning |
|---|---|---|
not_ours | 400 | /api/send only broadcasts transactions this API built: Universal Router swaps, and the one-time ERC-20 and Permit2 approvals in front of them. Anything else is refused before it reaches the chain. |
wrong_chain | 400 | The signed transaction is for another chain id; this API relays Arc (5042). |
Limits
| Code | HTTP | Meaning |
|---|---|---|
rate_limited | 429 | Over 3 calls a second to a single endpoint from one IP. Retry-After: 1 says when to try again. |
too_many_connections | 429 | One launch-feed socket and one advanced-stream socket per IP (and one per stream key) is the cap; this would have been the second. |
unauthorized | 401 | The advanced stream was opened without a key, or with an unknown or revoked one. Keys are free, ask in the Telegram group. |
too_many_tokens / too_many_wallets | 400 | A stream connection may follow at most 50 tokens and 50 wallets. |
Upstream
| Code | HTTP | Meaning |
|---|---|---|
rpc_error | 502 | The chain could not be read or the transaction could not be sent. The message carries the node's own text. Retry; if it persists, ask in the Telegram group. |