Skip to main content

Error shape

All API errors follow this JSON envelope:
{
  "error": {
    "code": "not_found",
    "message": "Render not found.",
    "details": {}
  }
}
FieldTypeDescription
codestringMachine-readable error code (see table below)
messagestringHuman-readable description
detailsobjectOptional additional context

HTTP status codes

StatusMeaning
200OK
202Accepted — job enqueued
201Created
204No content
400Bad request
401Unauthorized — invalid or missing API key
403Forbidden
404Not found
409Conflict — idempotency key reused with different body
422Unprocessable entity — validation failed
429Too many requests — rate limit exceeded
500Internal server error

Error codes

CodeHTTPDescription
unauthorized401Missing or invalid API key
forbidden403Action not permitted for this workspace
not_found404Resource does not exist
conflict409Idempotency key conflict
invalid_request422Request validation failed
unsupported_feature422Feature not yet supported
invalid_source422Source URL is invalid or inaccessible
source_not_found422Source URL returned 404
source_too_large422Source file exceeds the 5 GiB limit
codec_unsupported422Codec not supported by the render engine
quota_exceeded429Monthly render or task quota exhausted
rate_limited429Too many requests in the current window
internal500Unexpected internal error

Job-level errors

When a render or task fails asynchronously, the error field is set on the job object:
{
  "id": "render_01J...",
  "status": "failed",
  "error": {
    "code": "source_not_found",
    "message": "Source URL returned 404: https://cdn.example.com/missing.mp4"
  }
}
The same error is included in the render.failed / task.failed webhook payload.