Limits and errors
Handle Enterprise API limits, HTTP failures, and realtime session errors.
Default limits may be adjusted for an approved organization during onboarding.
| Limit | Default |
|---|---|
| Batch requests | 60 requests per minute per account |
| Batch audio upload | 100 MB |
| Concurrent realtime streams | 5 per account |
| Realtime session duration | 10 minutes |
| Realtime context | 128 KB |
Batch errors
Errors include a machine-readable code and human-readable error message.
{
"error": "Request body too large",
"code": "REQUEST_TOO_LARGE"
}
| Status | Example code | Handling |
|---|---|---|
400 |
BAD_REQUEST |
Correct the request; do not retry unchanged. |
401 |
Authentication error | Supply exactly one valid credential. |
403 |
Origin not allowed | Correct the origin or token binding. |
408 |
REQUEST_CANCELLED |
Retry with bounded exponential backoff. |
413 |
REQUEST_TOO_LARGE |
Reduce the upload size. |
429 |
Rate limited | Wait for Retry-After, then retry. |
500 |
PROCESSING_FAILED |
Do not retry indefinitely; contact support if persistent. |
503 |
TRANSCRIPTION_TIMEOUT or TRANSCRIPTION_UNAVAILABLE |
Retry with backoff and jitter. |
504 |
UPSTREAM_TIMEOUT |
Retry with backoff and jitter. |
The X-Dictate-Attempts response header reports how many processing attempts were used. Preserve transcription_id across a retry so Monologue can correlate the requests.
Realtime errors
Realtime failures arrive as session.error:
{
"type": "session.error",
"code": "...",
"message": "...",
"retry_via_async": true
}
When retry_via_async is true, close the stream and submit the buffered audio to the batch endpoint. Do not automatically replay audio unless your product can prevent duplicate output and the user still expects the result.