Speko Docs

Limits

Size caps, timeouts, and concurrency limits on the relay.

Size limits

LimitValueExceeded →
JSON request body1 MiB413 payload_too_large
STT request multipart part1 MiB413 payload_too_large
STT audio multipart part25 MiB413 payload_too_large
WebSocket frame1 MiBstream error
Idempotency-Key header256 bytes400 invalid_request

Time limits

LimitValue
Request body read deadline2 minutes
WebSocket session.configure deadline10 seconds after connect
Keepalive cadence (WS pings, SSE : heartbeat comments)every 20 seconds

There is deliberately no overall wall-clock cap on streaming sessions — liveness is enforced by heartbeats and by budget and lease extension.

Concurrency

Two independent layers can refuse work with 429 concurrency_exhausted (retryable):

  1. Per-organization slots — your account's concurrent-request limit, enforced at admission. Contact Speko to raise it.
  2. Per-edge stream slots — a local cap on any single relay task. Retrying lands on capacity elsewhere.

429 rate_limited is distinct: it is request-rate pressure rather than slot exhaustion. Back off in both cases.

Regional behavior

relay.speko.dev is anycast (AWS Global Accelerator, static IPv4 addresses); connections land on the nearest healthy region and stay there for their lifetime. /v1/models reflects the serving region's catalog, and every response names its region in Speko-Region. If a region is drained for maintenance, new connections shift automatically; in-flight streams on a draining task are given a generous window to complete.

On this page