When a request cannot be processed, Vela returns a JSON error response with a machine-readableDocumentation Index
Fetch the complete documentation index at: https://docs.vela.monolithsystematic.com/llms.txt
Use this file to discover all available pages before exploring further.
code and a human-readable message. HTTP status codes follow standard conventions: 400 for client errors, 401 for authentication failures, 404 for not-found resources, and 500 for server errors.
Error Response Format
request_id field is useful for support — include it when reporting issues.
Error Code Reference
INVALID_SIGNATURE
INVALID_SIGNATURE
HTTP Status: 401Cause: ECDSA signature verification failed. The address recovered from the signature does not match the
address field in the request.Common causes:- Wrong canonical JSON field order when signing
- Using
eth_signinstead ofpersonal_sign(EIP-191) - Signing the wrong message (e.g., missing a field, wrong nonce)
- Submitting the order from a different account than the signer
market_id, side, price, quantity, order_type, time_in_force, nonce. Use JSON.stringify() with no indentation.INSUFFICIENT_BALANCE
INSUFFICIENT_BALANCE
HTTP Status: 400Cause: Your available balance is too low to place the requested order.For a buy limit order:
available_USDC < price × quantity
For a sell limit order: available_BASE < quantityCommon causes:- Funds are locked in other open orders (reserved balance)
- You have not deposited enough
GET /account/:address/balances for your current available balance.DUPLICATE_NONCE
DUPLICATE_NONCE
HTTP Status: 400Cause: An order with the same
nonce has already been accepted for this account. Nonces must be strictly increasing — reusing or skipping back is rejected.Common causes:- Your local nonce counter fell behind the server’s high-water mark (e.g., after a reconnection)
- Two requests submitted simultaneously with the same nonce
nonce_high_water from GET /account/:address/balances and reset your counter to nonce_high_water + 1.MARKET_NOT_FOUND
MARKET_NOT_FOUND
HTTP Status: 404Cause: The
market_id in your request does not correspond to any active market.Common causes:- Typo in the market ID (e.g.,
"ETH-USD"instead of"ETH-USDC") - The market has been paused or delisted
GET /markets to get the current list of active markets and their IDs.INVALID_ORDER
INVALID_ORDER
HTTP Status: 400Cause: One or more order parameters are malformed or out of range.Specific cases:
price ≤ 0— price must be a positive fixed-point integerquantity ≤ 0— quantity must be positivepricenot a multiple of tick size — price granularity violationquantitynot a multiple of lot size — quantity granularity violationorder_type: "market"withtime_in_force: "gtc"— market orders cannot be GTCorder_type: "market"with apricefield — market orders ignore price, but including it is flagged- Missing required fields
message for the specific validation failure. Review Order Types for valid parameter combinations.CREDIT_BREACH
CREDIT_BREACH
HTTP Status: 400Cause: Placing this order would push your credit utilization to or past 1.0 (100%). The order is rejected before entering the book.This differs from the auto-cancel mechanism (which fires on a fill that would cause a breach) —
CREDIT_BREACH fires on order placement.Common causes:- You already have many resting orders with high total quoted value
- You’re trying to place a large order that exceeds remaining credit capacity
GET /account/:address/balances (credit.utilization). See MM Credit System.MARKET_PAUSED
MARKET_PAUSED
HTTP Status: 400Cause: The market is currently paused by the operator. No new orders can be placed. Existing orders have been cancelled.Fix: Monitor
GET /markets for the market’s status field to return "active".RATE_LIMITED
RATE_LIMITED
HTTP Status: 429Cause: Too many requests from your IP or account in a short window.Fix: Implement exponential backoff. The response includes a
Retry-After header with the number of seconds to wait.INTERNAL_ERROR
INTERNAL_ERROR
HTTP Status: 500Cause: An unexpected error occurred in the engine. This should be rare.Fix: Retry the request. If the error persists, include the
request_id when reporting the issue on GitHub.WebSocket Error Messages
Errors on WebSocket connections use the same codes:error message on the WebSocket does not close the connection unless the error is fatal (e.g., auth failure after the grace period). Non-fatal errors allow the connection to continue.
Reporting Issues
If you encounter unexpected errors or inconsistencies:- Note the
request_idfrom the error response - Open an issue at github.com/arpjw/vela with the request ID, error code, and a description of the request