ELBO AI, INC Videos API
The Videos API from ELBO AI, INC — 3 operation(s) for videos.
The Videos API from ELBO AI, INC — 3 operation(s) for videos.
openapi: 3.1.0
info:
title: Puppetry Developer API Beta Audio Uploads Videos API
description: Live Puppetry Developer API beta for Puppetry Voice API access, hosted audio uploads, usage, and credit-backed text/audio-to-video jobs.
version: '2026-05-11'
contact:
name: Puppetry Support
url: https://www.puppetry.com
email: support@puppetry.com
termsOfService: https://www.puppetry.com/tos
license:
name: Proprietary
servers:
- url: https://www.puppetry.com
description: Production
security:
- developerApiKey: []
tags:
- name: Videos
paths:
/api/v1/videos/text:
post:
operationId: createVideoFromText
x-openai-isConsequential: true
summary: Create a video from text
description: Queues a credit-backed text-to-video job using a hosted image URL and a Puppetry voice. Requires the videos:create scope. Accepted queued responses and non-terminal Idempotency-Key replays include Retry-After, X-Puppetry-Next-Poll-At, plus absolute Location/Content-Location, Puppetry-Operation-Id, Puppetry-Request-Id, and X-Puppetry-Credits-* headers when debit metadata is available so clients can pace, locate, trace, and reconcile the first status poll.
tags:
- Videos
security:
- developerApiKey: []
parameters:
- $ref: '#/components/parameters/IdempotencyKey'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/TextVideoRequest'
examples:
textVideo:
summary: Create text video
value:
image_url: https://example.com/portrait.png
text: Hello from Puppetry.
voice_id: puppetry-af_heart
language: en
expressiveness: 1
responses:
'200':
description: Terminal video job returned from an Idempotency-Key replay without charging another credit. Includes absolute Location/Content-Location, Puppetry-Operation-Id, Puppetry-Request-Id, and X-Puppetry-Credits-* headers when debit metadata is available for the replayed job; retryable failed replays also include Retry-After and X-Puppetry-Next-Poll-At.
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/RateLimitLimit'
X-RateLimit-Remaining:
$ref: '#/components/headers/RateLimitRemaining'
X-RateLimit-Reset:
$ref: '#/components/headers/RateLimitReset'
Retry-After:
$ref: '#/components/headers/RetryAfter'
X-Puppetry-Next-Poll-At:
$ref: '#/components/headers/NextPollAt'
Location:
$ref: '#/components/headers/VideoJobStatusLocation'
Content-Location:
$ref: '#/components/headers/VideoJobStatusLocation'
Puppetry-Operation-Id:
$ref: '#/components/headers/VideoJobOperationId'
X-Puppetry-Operation-Id:
$ref: '#/components/headers/VideoJobOperationId'
Puppetry-Request-Id:
$ref: '#/components/headers/VideoJobRequestId'
X-Puppetry-Request-Id:
$ref: '#/components/headers/VideoJobRequestId'
X-Puppetry-Credits-Required:
$ref: '#/components/headers/VideoJobCreditsRequired'
X-Puppetry-Credits-Remaining:
$ref: '#/components/headers/VideoJobCreditsRemaining'
content:
application/json:
schema:
$ref: '#/components/schemas/VideoJobReplayResponse'
'202':
description: Video job queued, or a non-terminal Idempotency-Key replay returned without charging another credit. Includes Retry-After, X-Puppetry-Next-Poll-At, plus absolute Location/Content-Location, Puppetry-Operation-Id, Puppetry-Request-Id, and X-Puppetry-Credits-* headers when debit metadata is available so clients can pace, locate, trace, and reconcile the first status poll.
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/RateLimitLimit'
X-RateLimit-Remaining:
$ref: '#/components/headers/RateLimitRemaining'
X-RateLimit-Reset:
$ref: '#/components/headers/RateLimitReset'
Retry-After:
$ref: '#/components/headers/RetryAfter'
X-Puppetry-Next-Poll-At:
$ref: '#/components/headers/NextPollAt'
Location:
$ref: '#/components/headers/VideoJobStatusLocation'
Content-Location:
$ref: '#/components/headers/VideoJobStatusLocation'
Puppetry-Operation-Id:
$ref: '#/components/headers/VideoJobOperationId'
X-Puppetry-Operation-Id:
$ref: '#/components/headers/VideoJobOperationId'
Puppetry-Request-Id:
$ref: '#/components/headers/VideoJobRequestId'
X-Puppetry-Request-Id:
$ref: '#/components/headers/VideoJobRequestId'
X-Puppetry-Credits-Required:
$ref: '#/components/headers/VideoJobCreditsRequired'
X-Puppetry-Credits-Remaining:
$ref: '#/components/headers/VideoJobCreditsRemaining'
content:
application/json:
schema:
$ref: '#/components/schemas/VideoJobQueuedResponse'
'400':
$ref: '#/components/responses/InvalidRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'402':
$ref: '#/components/responses/InsufficientCredits'
'403':
$ref: '#/components/responses/Forbidden'
'404':
description: Unknown Puppetry voice for text-to-video
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
examples:
voiceNotFound:
value:
error: voice_not_found
message: Unknown Puppetry voice. Use a voice_id from GET /api/v1/voices/puppetry.
details:
retryable: false
retry_blocked_reason: Unknown Puppetry voice. Use a voice_id from GET /api/v1/voices/puppetry.
retryBlockedReason: Unknown Puppetry voice. Use a voice_id from GET /api/v1/voices/puppetry.
retry_block_code: PUPPETRY_VOICE_NOT_FOUND
retryBlockCode: PUPPETRY_VOICE_NOT_FOUND
'409':
$ref: '#/components/responses/IdempotencyConflict'
'413':
description: Request body exceeds the video create limit.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
examples:
payloadTooLarge:
value:
error: payload_too_large
message: Request body must be 65536 bytes or fewer
details:
max_body_bytes: 65536
retryable: false
retry_blocked_reason: Request body must be 65536 bytes or fewer
retryBlockedReason: Request body must be 65536 bytes or fewer
retry_block_code: VIDEO_CREATE_PAYLOAD_TOO_LARGE
retryBlockCode: VIDEO_CREATE_PAYLOAD_TOO_LARGE
'415':
$ref: '#/components/responses/UnsupportedMediaType'
'429':
$ref: '#/components/responses/RateLimited'
'502':
$ref: '#/components/responses/UpstreamFailure'
'503':
$ref: '#/components/responses/TemporarilyUnavailable'
/api/v1/videos/audio:
post:
operationId: createVideoFromAudio
x-openai-isConsequential: true
summary: Create a video from audio
description: Queues a credit-backed audio-to-video job using hosted image and audio URLs. Requires the videos:create scope. Accepted queued responses and non-terminal Idempotency-Key replays include Retry-After, X-Puppetry-Next-Poll-At, plus absolute Location/Content-Location, Puppetry-Operation-Id, Puppetry-Request-Id, and X-Puppetry-Credits-* headers when debit metadata is available so clients can pace, locate, trace, and reconcile the first status poll.
tags:
- Videos
security:
- developerApiKey: []
parameters:
- $ref: '#/components/parameters/IdempotencyKey'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/AudioVideoRequest'
examples:
audioVideo:
summary: Create audio video
value:
image_url: https://example.com/portrait.png
audio_url: https://assets.puppetry.com/api-uploads/audio.mp3
expressiveness: 1
responses:
'200':
description: Terminal video job returned from an Idempotency-Key replay without charging another credit. Includes absolute Location/Content-Location, Puppetry-Operation-Id, Puppetry-Request-Id, and X-Puppetry-Credits-* headers when debit metadata is available for the replayed job; retryable failed replays also include Retry-After and X-Puppetry-Next-Poll-At.
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/RateLimitLimit'
X-RateLimit-Remaining:
$ref: '#/components/headers/RateLimitRemaining'
X-RateLimit-Reset:
$ref: '#/components/headers/RateLimitReset'
Retry-After:
$ref: '#/components/headers/RetryAfter'
X-Puppetry-Next-Poll-At:
$ref: '#/components/headers/NextPollAt'
Location:
$ref: '#/components/headers/VideoJobStatusLocation'
Content-Location:
$ref: '#/components/headers/VideoJobStatusLocation'
Puppetry-Operation-Id:
$ref: '#/components/headers/VideoJobOperationId'
X-Puppetry-Operation-Id:
$ref: '#/components/headers/VideoJobOperationId'
Puppetry-Request-Id:
$ref: '#/components/headers/VideoJobRequestId'
X-Puppetry-Request-Id:
$ref: '#/components/headers/VideoJobRequestId'
X-Puppetry-Credits-Required:
$ref: '#/components/headers/VideoJobCreditsRequired'
X-Puppetry-Credits-Remaining:
$ref: '#/components/headers/VideoJobCreditsRemaining'
content:
application/json:
schema:
$ref: '#/components/schemas/VideoJobReplayResponse'
'202':
description: Video job queued, or a non-terminal Idempotency-Key replay returned without charging another credit. Includes Retry-After, X-Puppetry-Next-Poll-At, plus absolute Location/Content-Location, Puppetry-Operation-Id, Puppetry-Request-Id, and X-Puppetry-Credits-* headers when debit metadata is available so clients can pace, locate, trace, and reconcile the first status poll.
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/RateLimitLimit'
X-RateLimit-Remaining:
$ref: '#/components/headers/RateLimitRemaining'
X-RateLimit-Reset:
$ref: '#/components/headers/RateLimitReset'
Retry-After:
$ref: '#/components/headers/RetryAfter'
X-Puppetry-Next-Poll-At:
$ref: '#/components/headers/NextPollAt'
Location:
$ref: '#/components/headers/VideoJobStatusLocation'
Content-Location:
$ref: '#/components/headers/VideoJobStatusLocation'
Puppetry-Operation-Id:
$ref: '#/components/headers/VideoJobOperationId'
X-Puppetry-Operation-Id:
$ref: '#/components/headers/VideoJobOperationId'
Puppetry-Request-Id:
$ref: '#/components/headers/VideoJobRequestId'
X-Puppetry-Request-Id:
$ref: '#/components/headers/VideoJobRequestId'
X-Puppetry-Credits-Required:
$ref: '#/components/headers/VideoJobCreditsRequired'
X-Puppetry-Credits-Remaining:
$ref: '#/components/headers/VideoJobCreditsRemaining'
content:
application/json:
schema:
$ref: '#/components/schemas/VideoJobQueuedResponse'
'400':
$ref: '#/components/responses/InvalidRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'402':
$ref: '#/components/responses/InsufficientCredits'
'403':
$ref: '#/components/responses/Forbidden'
'409':
$ref: '#/components/responses/IdempotencyConflict'
'413':
description: Request body exceeds the video create limit.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
examples:
payloadTooLarge:
value:
error: payload_too_large
message: Request body must be 65536 bytes or fewer
details:
max_body_bytes: 65536
retryable: false
retry_blocked_reason: Request body must be 65536 bytes or fewer
retryBlockedReason: Request body must be 65536 bytes or fewer
retry_block_code: VIDEO_CREATE_PAYLOAD_TOO_LARGE
retryBlockCode: VIDEO_CREATE_PAYLOAD_TOO_LARGE
'415':
$ref: '#/components/responses/UnsupportedMediaType'
'429':
$ref: '#/components/responses/RateLimited'
'502':
$ref: '#/components/responses/UpstreamFailure'
'503':
$ref: '#/components/responses/TemporarilyUnavailable'
/api/v1/videos/{jobId}:
get:
operationId: getVideoJob
x-openai-isConsequential: false
summary: Get video job status
description: Polls a Developer API video job created by the same API key. Requires the videos:read scope. Jobs created with another key, user, or org return 404. Status responses include absolute Location, Content-Location, Puppetry-Operation-Id, and Puppetry-Request-Id headers with the same poll target; queued or processing 200 responses also include Retry-After and X-Puppetry-Next-Poll-At so clients can pace polling.
tags:
- Videos
security:
- developerApiKey: []
parameters:
- name: jobId
in: path
required: true
schema:
type: string
pattern: ^api_video_[A-Za-z0-9_-]+$
responses:
'200':
description: Video job status
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/RateLimitLimit'
X-RateLimit-Remaining:
$ref: '#/components/headers/RateLimitRemaining'
X-RateLimit-Reset:
$ref: '#/components/headers/RateLimitReset'
Retry-After:
$ref: '#/components/headers/RetryAfter'
X-Puppetry-Next-Poll-At:
$ref: '#/components/headers/NextPollAt'
Location:
$ref: '#/components/headers/VideoJobStatusLocation'
Content-Location:
$ref: '#/components/headers/VideoJobStatusLocation'
Puppetry-Operation-Id:
$ref: '#/components/headers/VideoJobOperationId'
X-Puppetry-Operation-Id:
$ref: '#/components/headers/VideoJobOperationId'
Puppetry-Request-Id:
$ref: '#/components/headers/VideoJobRequestId'
X-Puppetry-Request-Id:
$ref: '#/components/headers/VideoJobRequestId'
X-Puppetry-Credits-Required:
$ref: '#/components/headers/VideoJobCreditsRequired'
X-Puppetry-Credits-Remaining:
$ref: '#/components/headers/VideoJobCreditsRemaining'
content:
application/json:
schema:
$ref: '#/components/schemas/VideoJobStatusResponse'
'400':
$ref: '#/components/responses/InvalidRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
description: Video job not found, or not visible to the authenticated API key
headers:
X-RateLimit-Limit:
$ref: '#/components/headers/RateLimitLimit'
X-RateLimit-Remaining:
$ref: '#/components/headers/RateLimitRemaining'
X-RateLimit-Reset:
$ref: '#/components/headers/RateLimitReset'
Location:
$ref: '#/components/headers/VideoJobStatusLocation'
Content-Location:
$ref: '#/components/headers/VideoJobStatusLocation'
Puppetry-Operation-Id:
$ref: '#/components/headers/VideoJobOperationId'
X-Puppetry-Operation-Id:
$ref: '#/components/headers/VideoJobOperationId'
Puppetry-Request-Id:
$ref: '#/components/headers/VideoJobRequestId'
X-Puppetry-Request-Id:
$ref: '#/components/headers/VideoJobRequestId'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
examples:
notFound:
value:
error: job_not_found
message: Video job not found
retryable: false
id: api_video_missing_20260702
job_id: api_video_missing_20260702
jobId: api_video_missing_20260702
task_id: api_video_missing_20260702
taskId: api_video_missing_20260702
operation_id: api_video_missing_20260702
operationId: api_video_missing_20260702
request_id: api_video_missing_20260702
requestId: api_video_missing_20260702
status_url: /api/v1/videos/api_video_missing_20260702
statusUrl: /api/v1/videos/api_video_missing_20260702
retry_blocked_reason: Video job not found or not visible to this API key
retryBlockedReason: Video job not found or not visible to this API key
retry_block_code: VIDEO_JOB_NOT_FOUND
retryBlockCode: VIDEO_JOB_NOT_FOUND
details:
retryable: false
id: api_video_missing_20260702
job_id: api_video_missing_20260702
jobId: api_video_missing_20260702
task_id: api_video_missing_20260702
taskId: api_video_missing_20260702
operation_id: api_video_missing_20260702
operationId: api_video_missing_20260702
request_id: api_video_missing_20260702
requestId: api_video_missing_20260702
status_url: /api/v1/videos/api_video_missing_20260702
statusUrl: /api/v1/videos/api_video_missing_20260702
retry_blocked_reason: Video job not found or not visible to this API key
retryBlockedReason: Video job not found or not visible to this API key
retry_block_code: VIDEO_JOB_NOT_FOUND
retryBlockCode: VIDEO_JOB_NOT_FOUND
content_location: /api/v1/videos/api_video_missing_20260702
contentLocation: /api/v1/videos/api_video_missing_20260702
content_location: /api/v1/videos/api_video_missing_20260702
contentLocation: /api/v1/videos/api_video_missing_20260702
'429':
$ref: '#/components/responses/RateLimited'
'502':
$ref: '#/components/responses/VideoJobStatusUnavailable'
'504':
$ref: '#/components/responses/VideoJobStatusTimeout'
components:
schemas:
VideoJobQueuedResponse:
type: object
required:
- object
- id
- operation_id
- request_id
- source
- status
- video_url
- credits
- status_url
- content_location
- created_at
- expires_at
- retry_after_seconds
- next_poll_at
- creation_credits
properties:
object:
type: string
const: video_job
id:
type: string
pattern: ^api_video_
example: api_video_8b1d2f4c6a7e9f0123456789
job_id:
type: string
pattern: ^api_video_
example: api_video_8b1d2f4c6a7e9f0123456789
description: Alias for id, useful for agent and task-style clients.
jobId:
type: string
pattern: ^api_video_
example: api_video_8b1d2f4c6a7e9f0123456789
description: SDK-style alias for id.
task_id:
type: string
pattern: ^api_video_
example: api_video_8b1d2f4c6a7e9f0123456789
description: Legacy task-style alias for id.
taskId:
type: string
pattern: ^api_video_
example: api_video_8b1d2f4c6a7e9f0123456789
description: CamelCase task-style alias for id.
operation_id:
type: string
pattern: ^api_video_
example: api_video_8b1d2f4c6a7e9f0123456789
description: Stable public operation id for tracing a Developer API video job. Mirrors id and never exposes the internal animation service job id.
operationId:
type: string
pattern: ^api_video_
example: api_video_8b1d2f4c6a7e9f0123456789
description: SDK-style alias for operation_id.
request_id:
type: string
pattern: ^api_video_
example: api_video_8b1d2f4c6a7e9f0123456789
description: Stable public request id for correlating a Developer API video job with backend logs. Mirrors id and never exposes the internal animation service job id.
requestId:
type: string
pattern: ^api_video_
example: api_video_8b1d2f4c6a7e9f0123456789
description: SDK-style alias for request_id.
source:
type: string
enum:
- text
- audio
description: Video create source. text means POST /api/v1/videos/text, audio means POST /api/v1/videos/audio.
request_source:
type: string
enum:
- text
- audio
description: Alias for source.
requestSource:
type: string
enum:
- text
- audio
description: SDK-style alias for source.
status:
type: string
enum:
- queued
video_url:
type:
- string
- 'null'
format: uri
description: Null until the job is completed.
error:
type:
- string
- 'null'
description: Null for queued jobs and non-failed Idempotency-Key replays.
credits:
$ref: '#/components/schemas/VideoCredits'
creation_credits:
$ref: '#/components/schemas/VideoJobCreationCredits'
description: Original create-time video credit debit for this job. Status polling remains no-charge; see credits.charged for the current request.
creationCredits:
$ref: '#/components/schemas/VideoJobCreationCredits'
description: SDK-style alias for creation_credits.
status_url:
type: string
example: /api/v1/videos/api_video_8b1d2f4c6a7e9f0123456789
description: Relative status URL for the API video job body. Use Location or Content-Location response headers when an absolute poll URL is required.
retry_after_seconds:
type: integer
minimum: 0
example: 5
description: Seconds to wait before the first status poll. Mirrors the Retry-After response header.
idempotent_replay:
type: boolean
description: Present and true when an Idempotency-Key replay returns an already accepted job without charging another credit.
videoUrl:
type:
- string
- 'null'
format: uri
description: SDK-style alias for video_url.
result_url:
type:
- string
- 'null'
format: uri
description: Alias for the completed video URL.
resultUrl:
type:
- string
- 'null'
format: uri
description: SDK-style alias for result_url.
download_url:
type:
- string
- 'null'
format: uri
description: Alias for the completed video download URL.
downloadUrl:
type:
- string
- 'null'
format: uri
description: SDK-style alias for download_url.
output_url:
type:
- string
- 'null'
format: uri
description: Alias for agent clients that call the completed video an output URL.
outputUrl:
type:
- string
- 'null'
format: uri
description: SDK-style alias for output_url.
url:
type:
- string
- 'null'
format: uri
description: Shortest SDK-style alias for the completed video URL.
statusUrl:
type: string
example: /api/v1/videos/api_video_8b1d2f4c6a7e9f0123456789
description: SDK-style alias for status_url.
created_at:
type: string
format: date-time
createdAt:
type: string
format: date-time
description: SDK-style alias for created_at.
expires_at:
type: string
format: date-time
description: When this API video job record expires from the status/idempotency lookup window.
expiresAt:
type: string
format: date-time
description: SDK-style alias for expires_at.
retryAfter:
type: integer
minimum: 0
example: 5
description: SDK-style alias for retry_after_seconds.
retryAfterSeconds:
type: integer
minimum: 0
example: 5
description: CamelCase alias for retry_after_seconds used by generated clients.
next_poll_at:
type: string
format: date-time
description: Absolute UTC time when clients should make the next status poll. Present with retry_after_seconds and mirrors the X-Puppetry-Next-Poll-At response header.
nextPollAt:
type: string
format: date-time
description: SDK-style alias for next_poll_at.
idempotentReplay:
type: boolean
description: SDK-style alias for idempotent_replay.
content_location:
type: string
example: /api/v1/videos/api_video_8b1d2f4c6a7e9f0123456789
description: Body alias for the status poll URL, mirroring the Content-Location response header target for clients that cannot reliably read headers.
contentLocation:
type: string
example: /api/v1/videos/api_video_8b1d2f4c6a7e9f0123456789
description: SDK-style alias for content_location.
additionalProperties: false
VideoJobReplayResponse:
type: object
required:
- object
- id
- operation_id
- request_id
- source
- status
- video_url
- error
- credits
- status_url
- content_location
- idempotent_replay
properties:
object:
type: string
const: video_job
id:
type: string
pattern: ^api_video_
example: api_video_8b1d2f4c6a7e9f0123456789
job_id:
type: string
pattern: ^api_video_
example: api_video_8b1d2f4c6a7e9f0123456789
description: Alias for id, useful for agent and task-style clients.
jobId:
type: string
pattern: ^api_video_
example: api_video_8b1d2f4c6a7e9f0123456789
description: SDK-style alias for id.
task_id:
type: string
pattern: ^api_video_
example: api_video_8b1d2f4c6a7e9f0123456789
description: Legacy task-style alias for id.
taskId:
type: string
pattern: ^api_video_
example: api_video_8b1d2f4c6a7e9f0123456789
description: CamelCase task-style alias for id.
operation_id:
type: string
pattern: ^api_video_
example: api_video_8b1d2f4c6a7e9f0123456789
description: Stable public operation id for tracing a Developer API video job. Mirrors id and never exposes the internal animation service job id.
operationId:
type: string
pattern: ^api_video_
example: api_video_8b1d2f4c6a7e9f0123456789
description: SDK-style alias for operation_id.
request_id:
type: string
pattern: ^api_video_
example: api_video_8b1d2f4c6a7e9f0123456789
description: Stable public request id for correlating a Developer API video job with backend logs. Mirrors id and never exposes the internal animation service job id.
requestId:
type: string
pattern: ^api_video_
example: api_video_8b1d2f4c6a7e9f0123456789
description: SDK-style alias for request_id.
source:
type: string
enum:
- text
- audio
description: Video create source. text means POST /api/v1/videos/text, audio means POST /api/v1/videos/audio.
request_source:
type: string
enum:
- text
- audio
description: Alias for source.
requestSource:
type: string
enum:
- text
- audio
description: SDK-style alias for source.
status:
type: string
enum:
- completed
- failed
progress:
type:
- number
- 'null'
minimum: 0
maximum: 100
video_url:
type:
- string
- 'null'
format: uri
error:
type:
- string
- 'null'
retryable:
type: boolean
description: Present for failed jobs when the backend knows whether retrying is useful. false means clients should not resubmit the same job.
retry_blocked_reason:
type: string
maxLength: 512
description: Machine-readable but redacted reason explaining why retryable is false.
retryBlockedReason:
type: string
maxLength: 512
description: SDK-style alias for retry_blocked_reason.
retry_block_code:
type: string
maxLength: 120
pattern: ^[a-zA-Z0-9._:-]{1,120}$
description: Stable retry-block code for failed jobs where retryable is false.
retryBlockCode:
type: string
maxLength: 120
pattern: ^[a-zA-Z0-9._:-]{1,120}$
description: SDK-style alias for retry_block_code.
diagnostics:
$ref: '#/components/schemas/VideoJobDiagnostics'
credits:
$ref: '#/components/schemas/VideoCredits'
creation_credits:
$ref: '#/components/schemas/VideoJobCreationCredits'
description: Original create-time video credit debit for this job when recorded. Idempotency-Key replays remain no-charge; see credits.charged for the current request.
creationCredits:
$ref: '#/components/schemas/VideoJobCreationCredits'
description: SDK-style alias for creation_credits.
status_url:
type: string
example: /api/v1/videos/api_video_8b1d2f4c6a7e9f0123456789
description: Relative status URL for the API video job body. Use Location or Content-Location response headers when an absolute poll URL is required.
idempotent_replay:
# --- truncated at 32 KB (96 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/elbo-ai-inc/refs/heads/main/openapi/elbo-ai-inc-videos-api-openapi.yml