Request quotas per endpoint category, throttling behavior, and how to design around them.
Overview
Shoonya enforces per-second and per-day request quotas, scoped separately for order APIs, data APIs, and the WebSocket connect handshake. Limits exist to protect exchange connectivity shared across all users, not to discourage automation — design for them from the start rather than retrofitting backoff logic later.
Use WebSocket instead of polling for anything continuous.
WebSocket connect
1 connection per session
Multiplex all symbol subscriptions over the single socket.
Historical Data
Lower burst allowance
Batch date ranges instead of looping day-by-day.
Exact numeric ceilings are enforced server-side and may be tuned without notice — treat the table above as design guidance, not a contract, and always handle Rate_Limited defensively.
How throttling responds
json
{
"stat": "Not_Ok",
"emsg": "Rate_Limited: too many requests, retry after backoff"
}
Best practices
Batch symbol lookups and quote checks; don't issue one REST call per instrument in a loop.
Implement exponential backoff with jitter on Rate_Limited responses — a fixed retry interval synchronizes retries across your own threads and makes bursts worse.
Separate your order-management traffic from your market-data traffic so a data-heavy loop never starves order placement of its share of the quota.
Prefer the WebSocket feed for anything that needs to observe more than a handful of instruments continuously.
Overview
Shoonya enforces per-second and per-day request quotas, scoped separately for order APIs, data APIs, and the WebSocket connect handshake. Limits exist to protect exchange connectivity shared across all users, not to discourage automation — design for them from the start rather than retrofitting backoff logic later.
Limits
Exact numeric ceilings are enforced server-side and may be tuned without notice — treat the table above as design guidance, not a contract, and always handle
Rate_Limiteddefensively.How throttling responds
Best practices
Rate_Limitedresponses — a fixed retry interval synchronizes retries across your own threads and makes bursts worse.Python example
Notes
Vendor/partner integrations with higher aggregate volume should discuss dedicated quota tiers during onboarding — see For Vendors / Partners.