JoinInDocs
Baton
v2 (beta)
Get a key
Baton v2 Guides Beta

Errors and limits

Close codes, rejection reasons, timeouts and capacity.

WebSocket close codes

Code Meaning What to do
1000 Normal close: after session.end, or idle_timeout Nothing.
1008 The start was rejected. The reason says why. Fix the request; don't retry unchanged.
1013 Temporarily unable to serve Retry after a short delay, ideally with backoff.

1008 reasons

Reason Cause
invalid api key Missing or unknown key.
unknown mode '<mode>' mode is not a recognised value.
bad language code(s) [...] A code is malformed.
language(s) not supported by this ASR: [...] A code is valid but not served.
unknown language mode ... language.mode is not auto.
eot: give a profile or a latency_budget_ms, not both Both were given.
unknown eot profile '<name>'; published: [...] The profile name doesn't exist for that tier.
eot.latency_budget_ms must be a positive number, got ... Zero, negative or not a number.
unsupported language 'xx' Rooms: the transcriber can't serve that language.

1013 reasons

Reason Cause
room capacity reached on this instance; retry Rooms are at capacity.
room ASR unavailable: <reason> Room transcription is temporarily unavailable.

Timeouts

  • Idle sessions on every /v2 endpoint close after idle_timeout_s seconds without speech (default 600; 0 or less disables it). A warning with code: "idle_timeout" and close_in_s comes first, then a 1000 close with reason idle_timeout. Speech resets the timer.
  • Sessions last at most one hour. Open a new session to continue.

HTTP limits

Keep HTTP scoring requests under 600 per minute per key. Above that, requests may be refused with 429 and Retry-After: 60. While the service is starting up: 503 with Retry-After: 30.

© 2026 JoinIn AI, Inc. All rights reserved.joinin.ai