home

Fees and limits

Rate limits and errors

Seeryx API limits and errors: the JSON error shape, codes such as below_minimum and rate_limited, HTTP statuses, request limits and retries.

Error format

Every error is JSON with a sentence for people in error; where a program should act on it, a stable code and sometimes more fields.

Errors
{ "error": "Invalid limit" }
{ "error": "Minimum order is 5 shares", "code": "below_minimum", "minimum": 5 }
{ "error": "Post only: this order would trade at once at 16¢; lower the price or turn Post only off", "code": "would_take" }
{ "error": "Too many open orders ...", "code": "open_orders_limit", "limit": { "account": 200, "round": 100 } }
{ "error": "Too many orders", "code": "rate_limited", "retryAfter": 4 }

Error codes

codeStatusMeaningWhat to do
below_minimum400Fewer shares than the minimum; minimum says how manyRaise the size
would_take400A post-only order would trade at onceMove the price away from the other side
open_orders_limit400Too many resting orders; limit has the account and market capsCancel some first
trading_paused400The session key that signed it was closedOpen a new session and sign again
rate_limited429Too many order requests; retryAfter in secondsWait, then send the same request
trading_halted503Trading is halted for everyone; GET /api/notice may say whyWait; cancels still work

Order answers can also carry a reason that is not an error: no_liquidity, beyond_limit and share_limit (see Trading).

HTTP statuses

StatusWhen
400Invalid input, not enough cash or free shares, a round that is not trading or is closing, an order below the minimum, a post-only order that would trade, a signed order that does not match, a missing or reused Idempotency-Key
401A missing, invalid or expired sign-in token (seeryx.com answers these with 403)
403A missing, invalid or expired sign-in token on seeryx.com ("Authentication required", "Invalid or expired token"), or a blocked account
404Unknown round, market or profile
408The request took longer than 30 seconds
409Not possible right now: no account yet, a trade still settling, a withdrawal not ready
413Body too large: an order, split or merge 16 KB, a batch 15 times that, anything else 100 KB
429A rate limit: wait as many seconds as Retry-After says
502Solana or the bridge did not answer
503Trading halted (code trading_halted), the exchange clock is unavailable, or the server is busy (Retry-After)

Rate limits

WhatLimitCounted per
Orders (each order of a batch counts), cancels, splits, merges250 per 10 secondsAccount
Resting orders200 in all, 100 in one marketAccount
Your account, orders, positions, balance, /auth/me12,000 a minute togetherAccount
Your activity, settled, feed, P&L300 a minute togetherAccount
Markets and rounds (/markets..., /rounds/:slug)1,200 a minuteIP address
Order book, trades, volume, markets summary, round activity3,000 a minuteIP address
Statistics, leaderboard, profiles, holders300 a minuteIP address
/auth/nonce, /auth/verify30 a minute eachIP address
/deposit/recover2 a minuteAccount
WebSocketSee WebSocketConnection, IP address

Over a limit the answer is 429 with Retry-After in seconds. A busy server answers 503 with Retry-After. Answers of statistics, the leaderboard and holders may be a few seconds old. GET https://seeryx.com/health answers { "status": "ok" } for uptime checks.

Retrying safely

  • 429 and 503: wait as long as Retry-After says, then send the same request again.
  • A network error or a 5xx on a write: resend the same body with the same Idempotency-Key; if the first attempt went through you get its answer, and nothing is placed twice.
  • 400: do not repeat it unchanged; fix the request, then send it with a new key (and a new signed id).
  • 401 or 403: sign in again.