tickstreamdocs

DOCS

Limits & errors

What counts against you, what doesn't, and how errors are shaped.

Streaming limits

  • Messages are unlimited on all paid plans — there are no per-tick fees or overage charges.
  • Connections: up to 5 concurrent WebSocket connections per key. Need more? Ask us.
  • Symbols: subscribe to as many symbols as you like on a single connection.

REST rate limits

There is currently no hard per-key REST rate limit, and no X-RateLimit-* headers. This page used to publish 60 requests/minute with those headers; a customer asked us to confirm it on 17 August 2026 and it turned out to be documentation for something that was never built. We would rather correct the page than let you design a backoff around a number that does not exist.

What is actually true today:

  • Live connections are capped, not requests. Your package's connection count is the real limit — see your plan on pricing.
  • Deep options and historical-GEX queries are the expensive ones. They fan out to our options source, which has its own concurrency ceiling; we absorb that server-side with backoff, so a burst gets slower rather than rejected.
  • Please still be reasonable. REST is for snapshots and backfill — stream what you need continuously over the WebSocket instead of polling /quote in a tight loop. If we ever do need a hard limit, it will be published here first, with the headers to match.

Error shape

All errors share the same JSON envelope with a stable code:

{
  "error": {
    "code": "plan_required",
    "message": "'trade_quote' needs the Options Pro package",
    "status": 403
  }
}

Status codes

StatusCodeMeaning
400bad_requestMalformed parameters (e.g. bad date range).
401unauthorizedMissing or invalid API key.
402no_subscriptionNo active subscription for live data.
403plan_requiredYour packages don't include this feed or symbol. The message names what would.
404unknown_symbolSymbol not found — see symbols.
429rate_limitedToo many REST requests — back off.
5xxinternalOur fault. Retry with backoff; we're paged.
tip

The SDKs raise typed exceptions/errors carrying the code, so you can branch on it without parsing strings.