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.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/elbo-ai-inc-videos-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.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:
responses:
Unauthorized:
description: Missing, malformed, invalid, or revoked API key
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
examples:
unauthorized:
value:
error: unauthorized
message: 'Missing or invalid Authorization header. Use: Bearer pk_live_...'
InsufficientCredits:
description: The account does not have enough video credits to create the job.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
examples:
insufficientCredits:
value:
error: insufficient_credits
message: Not enough video credits to create a video job
details:
code: insufficient_video_credits
reason: insufficient_video_credits
required_credits: 1
requiredCredits: 1
remaining_credits: 0
remainingCredits: 0
retryable: false
retry_blocked_reason: Developer API video generation needs 1 credit, but only 0 remain.
retryBlockedReason: Developer API video generation needs 1 credit, but only 0 remain.
retry_block_code: INSUFFICIENT_VIDEO_CREDITS
retryBlockCode: INSUFFICIENT_VIDEO_CREDITS
checkout_url: https://www.puppetry.com/pricing#pricing-credit-packs
checkoutUrl: https://www.puppetry.com/pricing#pricing-credit-packs
top_up: Buy 5 video credits for $4.99 at https://www.puppetry.com/pricing#pricing-credit-packs
topUp: Buy 5 video credits for $4.99 at https://www.puppetry.com/pricing#pricing-credit-packs
video_generation:
can_create: false
canCreate: false
required_credits: 1
requiredCredits: 1
credits_remaining: 0
creditsRemaining: 0
concurrent_jobs: 2
concurrentJobs: 2
active_jobs: 0
activeJobs: 0
available_slots: 2
availableSlots: 2
reason: insufficient_video_credits
videoGeneration:
can_create: false
canCreate: false
required_credits: 1
requiredCredits: 1
credits_remaining: 0
creditsRemaining: 0
concurrent_jobs: 2
concurrentJobs: 2
active_jobs: 0
activeJobs: 0
available_slots: 2
availableSlots: 2
reason: insufficient_video_credits
RateLimited:
description: Rate limit or monthly beta quota exceeded
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'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
examples:
rateLimited:
value:
error: rate_limited
message: 'Developer API beta limit exceeded: 10 requests per minute.'
retryable: true
retry_after_seconds: 30
retryAfter: 30
retryAfterSeconds: 30
next_poll_at: '2026-06-22T08:50:30.000Z'
nextPollAt: '2026-06-22T08:50:30.000Z'
details:
retryable: true
retry_after_seconds: 30
retryAfter: 30
retryAfterSeconds: 30
next_poll_at: '2026-06-22T08:50:30.000Z'
nextPollAt: '2026-06-22T08:50:30.000Z'
voiceCharacterLimit:
value:
error: voice_character_limit_exceeded
message: Monthly Puppetry Voice character limit exceeded
details:
retryable: true
retry_after_seconds: 86400
retryAfter: 86400
retryAfterSeconds: 86400
concurrentVideoJobLimit:
value:
error: concurrent_job_limit_exceeded
message: Developer API concurrent job limit exceeded
details:
retryable: true
concurrent_jobs: 2
concurrentJobs: 2
active_jobs: 2
activeJobs: 2
available_slots: 0
availableSlots: 0
active_job_expires_in_seconds: 512
activeJobExpiresInSeconds: 512
retry_after_seconds: 512
retryAfter: 512
retryAfterSeconds: 512
VideoJobStatusUnavailable:
description: Puppetry could not inspect an accepted video job. Retry-After, X-Puppetry-Next-Poll-At, Location, Content-Location, Puppetry-Operation-Id, and Puppetry-Request-Id identify and pace the same status poll target.
headers:
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/ErrorResponse'
examples:
jobStatusUnavailable:
value:
error: job_status_unavailable
message: Video job status is temporarily unavailable
retryable: true
retry_after_seconds: 10
retryAfter: 10
retryAfterSeconds: 10
next_poll_at: '2026-06-22T08:50:10.000Z'
nextPollAt: '2026-06-22T08:50:10.000Z'
credits:
charged: 0
remaining: null
creation_credits:
charged: 1
remaining_after_debit: 299
remainingAfterDebit: 299
creationCredits:
charged: 1
remaining_after_debit: 299
remainingAfterDebit: 299
details:
retryable: true
retry_after_seconds: 10
retryAfter: 10
retryAfterSeconds: 10
next_poll_at: '2026-06-22T08:50:10.000Z'
nextPollAt: '2026-06-22T08:50:10.000Z'
object: video_job
id: api_video_abc123
job_id: api_video_abc123
jobId: api_video_abc123
task_id: api_video_abc123
taskId: api_video_abc123
status_url: /api/v1/videos/api_video_abc123
statusUrl: /api/v1/videos/api_video_abc123
credits:
charged: 0
remaining: null
creation_credits:
charged: 1
remaining_after_debit: 299
remainingAfterDebit: 299
creationCredits:
charged: 1
remaining_after_debit: 299
remainingAfterDebit: 299
created_at: '2026-06-22T08:50:00.000Z'
createdAt: '2026-06-22T08:50:00.000Z'
content_location: /api/v1/videos/api_video_abc123
contentLocation: /api/v1/videos/api_video_abc123
jobResultUnavailable:
value:
error: job_result_unavailable
message: Video job result is temporarily unavailable
retryable: true
retry_after_seconds: 10
retryAfter: 10
retryAfterSeconds: 10
next_poll_at: '2026-06-22T08:50:10.000Z'
nextPollAt: '2026-06-22T08:50:10.000Z'
credits:
charged: 0
remaining: null
creation_credits:
charged: 1
remaining_after_debit: 299
remainingAfterDebit: 299
creationCredits:
charged: 1
remaining_after_debit: 299
remainingAfterDebit: 299
details:
retryable: true
retry_after_seconds: 10
retryAfter: 10
retryAfterSeconds: 10
next_poll_at: '2026-06-22T08:50:10.000Z'
nextPollAt: '2026-06-22T08:50:10.000Z'
object: video_job
id: api_video_abc123
job_id: api_video_abc123
jobId: api_video_abc123
task_id: api_video_abc123
taskId: api_video_abc123
status_url: /api/v1/videos/api_video_abc123
statusUrl: /api/v1/videos/api_video_abc123
credits:
charged: 0
remaining: null
creation_credits:
charged: 1
remaining_after_debit: 299
remainingAfterDebit: 299
creationCredits:
charged: 1
remaining_after_debit: 299
remainingAfterDebit: 299
created_at: '2026-06-22T08:50:00.000Z'
createdAt: '2026-06-22T08:50:00.000Z'
content_location: /api/v1/videos/api_video_abc123
contentLocation: /api/v1/videos/api_video_abc123
IdempotencyConflict:
description: The Idempotency-Key is already creating a video job or hosted upload URL, or it was reused with different input. Video create conflicts include Location/Content-Location, Puppetry-Operation-Id, and Puppetry-Request-Id headers for the existing API video job when one is known.
headers:
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'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
examples:
idempotencyInProgress:
value:
error: idempotency_key_in_progress
message: A video job or upload URL with this Idempotency-Key is already being created. Retry this request shortly.
details:
retryable: true
retry_after_seconds: 5
retryAfter: 5
# --- 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