Create job
Order captions
https://api.el.ai/v1/jobs Requires full key access. Exactly one source is required. Default maximum media length: 12 hours, configurable per workspace. A lower workspace-wide media limit still applies.
Authorization
Authorizationheader · string RequiredBearer el_live_…, a workspace API key. This endpoint needs a key with full access. About keys
Headers
Idempotency-KeystringOptional. Use a unique key per order and reuse it with the same body to retry safely. Keys are scoped to the workspace. A replay returns the original job with 200 and idempotent-replayed: true. Reusing a key with a different body returns 409 idempotency_conflict. Without a key, each accepted request creates a new job and charge.
- 1–255 chars
- matches ^[!-~]+$
Request body
application/jsonProvide exactly one source: media_url OR upload_id. Sending both or neither is invalid. Choose the Media URL or Uploaded file variant below.
media_url) or Uploaded file (upload_id)media_urlstringPublic HTTP(S) video/audio URL, including supported YouTube links. Required only for the Media URL variant; omit when using upload_id.
- ≥ 1 chars
upload_idstring · uuidID returned by POST /uploads, after uploading the file. Required only for the Uploaded file variant; omit when using media_url.
titlestringDashboard title and download filename. Defaults to the generated job ID. Default maximum: 300 characters, configurable per workspace.
- ≥ 1 chars
stylestringclean removes fillers, false starts, and stutters; verbatim keeps every spoken word.
- One of
- clean
- verbatim
- Default
- clean
modelstringCaptioning model. Only ave-base is supported.
- One of
- ave-base
- Default
- ave-base
speaker_labelsbooleanIdentify speaker turns. Set false for dialogue without labels.
- Default
- true
speaker_label_stylestringSRT/VTT labels: >> NAME:, [NAME], NAME:, or dashes without names. Ignored when speaker_labels is false. Transcripts use their native speaker headings; JSON has a separate speaker field.
- One of
- gt_name
- brackets
- colon
- dashes
- Default
- gt_name
atmosphericsbooleanInclude meaningful non-speech sounds. Uses the same add-on pricing as dashboard checkout.
- Default
- true
profanitystringKeep profanity, mask it (f***), replace it with [expletive], or omit it. Does not alter source audio.
- One of
- as_spoken
- mask
- label
- omit
- Default
- as_spoken
redactionsRedactionsPrivacy controls for caption text, using the same redaction pricing as checkout. Source audio and video are unchanged.
Accepts one of:- Standard replacement
- Custom replacement requires
replacement,custom_replacement
piibooleanRedact personal data such as emails and phone numbers.
- Default
- false
namesbooleanRedact named individuals.
- Default
- false
organizationsbooleanRedact organization names.
- Default
- false
termsarray of stringCustom terms to redact, one term per item; each must be a nonblank single line.
- Default
- []
- ≤ 200 items
replacementstringReplace with [REDACTED], a category such as [EMAIL], nothing, or custom_replacement.
- One of
- redacted
- category_label
- silent
- custom_string
- Default
- category_label
custom_replacementstringRequired when replacement is custom_string. Nonblank, single-line text.
- 1–120 chars
glossaryarray of stringNames and terms with preferred spelling, used where the audio supports them. Defaults to at most 200 terms of 100 characters each; configurable per workspace.
- Default
- []
webhook_urlstring · uriPublic HTTPS callback. Redirects are not followed.
- ≤ 2048 chars
- matches ^https://
metadatamap of stringYour string key–value pairs, returned on the job and in webhook events. Defaults: 20 keys of 1–40 characters, values up to 500 characters. These maxima are configurable per workspace.
Response · 200
application/jsonIdempotent replay.
idstring · uuidobjectstring- One of
- job
statusstring- One of
- queued
- processing
- completed
- cancelled
progressinteger · nullable- 0–100
etastring · date-time · nullabletitlestringmediaobjecttypestring- One of
- url
- upload
urlstring · nullableupload_idstring · uuid · nullableduration_secondsnumber
languagestring · nullableoptionsobjectstylestringclean removes fillers, false starts, and stutters; verbatim keeps every spoken word.
- One of
- clean
- verbatim
- Default
- clean
modelstringCaptioning model. Only ave-base is supported.
- One of
- ave-base
- Default
- ave-base
speaker_labelsbooleanIdentify speaker turns. Set false for dialogue without labels.
- Default
- true
speaker_label_stylestringSRT/VTT labels: >> NAME:, [NAME], NAME:, or dashes without names. Ignored when speaker_labels is false. Transcripts use their native speaker headings; JSON has a separate speaker field.
- One of
- gt_name
- brackets
- colon
- dashes
- Default
- gt_name
atmosphericsbooleanInclude meaningful non-speech sounds. Uses the same add-on pricing as dashboard checkout.
- Default
- true
profanitystringKeep profanity, mask it (f***), replace it with [expletive], or omit it. Does not alter source audio.
- One of
- as_spoken
- mask
- label
- omit
- Default
- as_spoken
redactionsRedactionsPrivacy controls for caption text, using the same redaction pricing as checkout. Source audio and video are unchanged.
Accepts one of:- Standard replacement
- Custom replacement requires
replacement,custom_replacement
piibooleanRedact personal data such as emails and phone numbers.
- Default
- false
namesbooleanRedact named individuals.
- Default
- false
organizationsbooleanRedact organization names.
- Default
- false
termsarray of stringCustom terms to redact, one term per item; each must be a nonblank single line.
- Default
- []
- ≤ 200 items
replacementstringReplace with [REDACTED], a category such as [EMAIL], nothing, or custom_replacement.
- One of
- redacted
- category_label
- silent
- custom_string
- Default
- category_label
custom_replacementstringRequired when replacement is custom_string. Nonblank, single-line text.
- 1–120 chars
glossaryarray of stringwebhook_urlstring · nullable
costobject · nullableamountstringDecimal amount in USD, net of refunds.
currencystring- One of
- usd
cancellationobject · nullablereasonstring- One of
- unsupported_language
- unsupported_media
- unusable_media
- media_unavailable
- deleted
- not_started
messagestring
captionsobject · nullablesrtstring · urivttstring · uritxtstring · uridocxstring · urijsonstring · uri
metadatamap of stringString values. Defaults: 20 keys of 1–40 characters, values up to 500 characters. These maxima are configurable per workspace.
created_atstring · date-timecompleted_atstring · date-time · nullable
Headers
request-idstringSupport request identifier.
cache-controlstring- One of
- no-store
idempotent-replayedstring- One of
- true
Response · 201
application/jsonCreated; mediaOrder initialization completed.
idstring · uuidobjectstring- One of
- job
statusstring- One of
- queued
- processing
- completed
- cancelled
progressinteger · nullable- 0–100
etastring · date-time · nullabletitlestringmediaobjecttypestring- One of
- url
- upload
urlstring · nullableupload_idstring · uuid · nullableduration_secondsnumber
languagestring · nullableoptionsobjectstylestringclean removes fillers, false starts, and stutters; verbatim keeps every spoken word.
- One of
- clean
- verbatim
- Default
- clean
modelstringCaptioning model. Only ave-base is supported.
- One of
- ave-base
- Default
- ave-base
speaker_labelsbooleanIdentify speaker turns. Set false for dialogue without labels.
- Default
- true
speaker_label_stylestringSRT/VTT labels: >> NAME:, [NAME], NAME:, or dashes without names. Ignored when speaker_labels is false. Transcripts use their native speaker headings; JSON has a separate speaker field.
- One of
- gt_name
- brackets
- colon
- dashes
- Default
- gt_name
atmosphericsbooleanInclude meaningful non-speech sounds. Uses the same add-on pricing as dashboard checkout.
- Default
- true
profanitystringKeep profanity, mask it (f***), replace it with [expletive], or omit it. Does not alter source audio.
- One of
- as_spoken
- mask
- label
- omit
- Default
- as_spoken
redactionsRedactionsPrivacy controls for caption text, using the same redaction pricing as checkout. Source audio and video are unchanged.
Accepts one of:- Standard replacement
- Custom replacement requires
replacement,custom_replacement
piibooleanRedact personal data such as emails and phone numbers.
- Default
- false
namesbooleanRedact named individuals.
- Default
- false
organizationsbooleanRedact organization names.
- Default
- false
termsarray of stringCustom terms to redact, one term per item; each must be a nonblank single line.
- Default
- []
- ≤ 200 items
replacementstringReplace with [REDACTED], a category such as [EMAIL], nothing, or custom_replacement.
- One of
- redacted
- category_label
- silent
- custom_string
- Default
- category_label
custom_replacementstringRequired when replacement is custom_string. Nonblank, single-line text.
- 1–120 chars
glossaryarray of stringwebhook_urlstring · nullable
costobject · nullableamountstringDecimal amount in USD, net of refunds.
currencystring- One of
- usd
cancellationobject · nullablereasonstring- One of
- unsupported_language
- unsupported_media
- unusable_media
- media_unavailable
- deleted
- not_started
messagestring
captionsobject · nullablesrtstring · urivttstring · uritxtstring · uridocxstring · urijsonstring · uri
metadatamap of stringString values. Defaults: 20 keys of 1–40 characters, values up to 500 characters. These maxima are configurable per workspace.
created_atstring · date-timecompleted_atstring · date-time · nullable
Headers
request-idstringSupport request identifier.
cache-controlstring- One of
- no-store
Errors
Errors share one shape: an error object with a stable code and a human-readable message. See Errors and retries.
| 400 | Invalid request |
| 401 | Missing, invalid or revoked API key |
| 402 | Insufficient funds or budget |
| 403 | Key or workspace does not allow this operation |
| 404 | Resource not found in this workspace |
| 409 | Conflict |
| 413 | JSON body exceeds 64 KiB |
| 415 | Unsupported content type |
| 422 | Media or order cannot be processed |
| 429 | Shared read limit per API key or write limit per workspace exceeded |
| 500 | Internal error |
| 503 | temporarily_unavailable: request limit enforcement is unavailable, or job submission is busy. Retry after 5 seconds. |