Errors
This document describes the error model and all error responses supported by the API as defined in the OpenAPI specification.
Error Envelope
All error responses conform to a common JSON schema:
Error Response Structure
{
"error": "error_code",
"details": "Human-readable description of what went wrong"
}- error — A concise error string describing the problem.
- details — Optional additional context that can help with debugging or client messaging.
Live session envelope
The live session endpoints (/v2/live/*) nest their error data under error so clients can branch on a stable code rather than parsing a message:
Live Session Error Response Structure
{
"error": {
"code": "HLS_INPUT_INCOMPATIBLE",
"type": "VALIDATION_ERROR",
"message": "H.264 profile 'high-10' is not supported",
"details": { "video_profile": "high-10" },
"requestId": "req_01HZ..."
}
}- code — Stable, machine-readable identifier. Branch on this.
- type — Broad classification, e.g.
VALIDATION_ERROR,NOT_FOUND,UNSUPPORTED_OPERATION,SERVICE_UNAVAILABLE. - message — Human-readable description.
- details — Optional object naming the specific fields that failed.
- requestId — Echoes
X-Request-Idwhen you send one. Quote it in support tickets.
HTTP Status Codes
| Status | Meaning | Typical Scenarios |
|---|---|---|
| 400 Bad Request | Validation or formatting issue | Missing required fields, invalid enum values, malformed identifiers, invalid types or formats, an HLS source outside the input contract |
| 401 Unauthorized | Missing or invalid credentials | Absent or incorrect X-API-KEY header |
| 404 Not Found | Resource does not exist | Unknown live session ID |
| 500 Internal Server Error | Unexpected server condition | Downstream service failure, transient infrastructure outages, unhandled exceptions |
| 501 Not Implemented | Valid request the environment cannot serve | Live ingest or a requested transport is not provisioned for your account |
| 503 Service Unavailable | Transient capacity or availability event | Source normalization capacity exhausted, ingest endpoint temporarily unreachable |
Note: Redirects (303 See Other) are not errors. They indicate the client should follow the Location header to continue the flow.
Endpoint-specific Error Notes
POST /v2/generate
- 400 Bad Request
contentmissing or of the wrong shape:typemust betext(the only supported input).datais required and must contain the text to translate.
outputvalidation:formatmust be one of:hls,mp4.delivery.methodmust be one of:stream,download,display,push.delivery.configis allowed but must be an object if provided.delivery.config.screenIdis required whendelivery.methodisdisplay.
contextvalidation: must be an object; known fields have expected types if provided.
- 500 Internal Server Error
- Failures during translation job creation, media processing, or URL presigning.
POST /v2/generate — Example Error
{
"error": "validation_error",
"details": "output.format must be one of: hls, mp4"
}POST /v1/generate
- 400 Bad Request
- Body must match the TranslationRequest schema used by v1.
- Same content/output/context validation considerations as v2 apply.
- 500 Internal Server Error
- Unexpected processing failures or downstream dependency issues.
POST /v1/generate — Example Error
{
"error": "invalid_request",
"details": "content.data is required"
}GET /v1/status/{job_id}
- 400 Bad Request —
job_idmissing or invalid format. - 500 Internal Server Error — Internal failures retrieving job status.
GET /v1/status — Example Error
{
"error": "invalid_job_id",
"details": "Provide a valid job_id path parameter"
}GET /v1/silence
- 400 Bad Request — Invalid
language,signer,format, ortransparentparameter, or an unsupported combination (transparent=truewith explicitformat=ts). - 500 Internal Server Error — Failures generating presigned URLs for silence segments.
GET /v1/silence — 400 Example
{
"error": "invalid language "xyz": must be one of bsl, asl"
}GET /v1/silence — 400 Signer Example
{
"error": "invalid signer "foo" for language "bsl": must be one of rae"
}GET /v1/silence — 400 Format Example
{
"error": "invalid format "xyz": must be one of mp4, ts"
}GET /v1/silence — 400 Transparent Example
{
"error": "transparent output not available for ts format"
}GET /v1/silence — 500 Example
{
"error": "presign_failed",
"details": "Temporary failure generating presigned URLs"
}POST /v2/live/sessions
- 400 Bad Request
- Invalid
sourceType: must be one ofRTMP_PUSH,SRT_PUSH,HLS_PULL. - Missing
hlsSourceUrlwhensourceTypeisHLS_PULL. - Invalid
outputType: must be one ofHLS,RTMP,SRT. - Missing
rtmpOutputUrlwhenoutputTypeisRTMP, oroutputDestinationUrlwhenoutputTypeisSRT. - Invalid
language/signer, or a combination that does not exist. - An
HLS_PULLsource that fails the picture-in-picture input contract — see the codes below.
- Invalid
- 401 Unauthorized — Invalid or missing API key.
- 501 Not Implemented — Live ingest, or the specific transport requested, is not provisioned for your account.
- 503 Service Unavailable — Source normalization capacity exhausted, or the RTMP ingest endpoint is temporarily unreachable. Retry with backoff.
POST /v2/live/sessions — Example Error
{
"error": {
"code": "BAD_REQUEST",
"type": "VALIDATION_ERROR",
"message": "hlsSourceUrl is required when sourceType is HLS_PULL"
}
}Error codes
| Code | Status | Meaning |
|---|---|---|
HLS_INPUT_UNREACHABLE | 400 | The hlsSourceUrl could not be fetched — unreachable origin, or an expired signature |
HLS_INPUT_MALFORMED | 400 | The manifest was fetched but could not be parsed — no segments, or no #EXT-X-VERSION |
HLS_INPUT_INCOMPATIBLE | 400 | The source falls outside the input contract and cannot be normalized. details names the failing dimension |
HLS_INPUT_NORMALIZE_CAPACITY | 503 | Too many source normalization jobs in flight. Honour the Retry-After: 30 header and retry |
PICTURE_IN_PICTURE_UNSUPPORTED_FOR_SOURCE | 501 | Picture-in-picture is not available for the requested source type. No source type returns this today |
MEDIA_LIVE_NOT_CONFIGURED | 501 | The requested source or output needs live ingest infrastructure that is not provisioned in this environment |
SRT_RELAY_NOT_CONFIGURED | 501 | SRT_PUSH was requested but SRT ingest is not provisioned in this environment |
RTMP_ENDPOINT_UNREACHABLE | 503 | The RTMP ingest endpoint we would hand back is not reachable. Retry with backoff |
The three HLS_INPUT_* 400s apply to picture-in-picture sessions with an HLS_PULL source. See HLS Source Requirements for the full contract and how to fix each one.
GET /v2/live/sessions/{id}
- 404 Not Found — The specified session ID does not exist.
GET /v2/live/sessions — Example Error
{
"error": {
"code": "NOT_FOUND",
"type": "NOT_FOUND",
"message": "session not found"
}
}DELETE /v2/live/sessions/{id}
- 404 Not Found — The specified session ID does not exist.
DELETE /v2/live/sessions — Example Error
{
"error": {
"code": "NOT_FOUND",
"type": "NOT_FOUND",
"message": "session not found"
}
}Client Guidance
- Do not retry 400 responses without correcting the request — they indicate client-side issues.
- 500 responses may be transient — implement safe retries with exponential backoff where appropriate.
- Always read the
detailsfield for additional context to fix the failing request quickly. - Branch on
error.code, noterror.messagefor live session errors — messages may be reworded, codes are stable. - Honour
Retry-Afterwhen it is present on a 503, rather than retrying immediately.
Last updated on