{"openapi":"3.0.3","info":{"title":"Ave Public Captioning API","version":"1.0.0"},"servers":[{"url":"https://api.el.ai/v1"}],"security":[{"bearerAuth":[]}],"paths":{"/uploads":{"post":{"operationId":"createUpload","summary":"Reserve an upload; PUT raw file bytes to the returned URL","responses":{"201":{"description":"Success","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Upload"}}}},"400":{"description":"Invalid request","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or revoked API key","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Insufficient funds or budget","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Key or workspace does not allow this operation","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found in this workspace","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"JSON body exceeds 64 KiB","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Unsupported content type","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Media or order cannot be processed","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Shared read limit per API key or write limit per workspace exceeded","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}},"retry-after":{"description":"Seconds to wait before retrying. If an Idempotency-Key was supplied, reuse it for job retries.","schema":{"type":"integer","minimum":1}},"x-ratelimit-limit":{"description":"Maximum requests in the current minute window.","schema":{"type":"integer","minimum":0}},"x-ratelimit-remaining":{"description":"Remaining requests in the current window.","schema":{"type":"integer","minimum":0}},"x-ratelimit-reset":{"description":"Seconds until the current window resets.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"temporarily_unavailable: request limit enforcement is unavailable, or job submission is busy. Retry after 5 seconds.","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}},"retry-after":{"description":"Seconds to wait before retrying. If an Idempotency-Key was supplied, reuse it for job retries.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"description":"Requires full key access. No request body is needed. Upload URL expires in six hours. Call POST /jobs with upload_id after upload completes."}},"/jobs":{"post":{"operationId":"createJob","summary":"Order captions","responses":{"200":{"description":"Idempotent replay","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}},"idempotent-replayed":{"schema":{"type":"string","enum":["true"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"201":{"description":"Created; mediaOrder initialization completed","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"400":{"description":"Invalid request","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or revoked API key","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Insufficient funds or budget","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Key or workspace does not allow this operation","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found in this workspace","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"JSON body exceeds 64 KiB","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Unsupported content type","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Media or order cannot be processed","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Shared read limit per API key or write limit per workspace exceeded","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}},"retry-after":{"description":"Seconds to wait before retrying. If an Idempotency-Key was supplied, reuse it for job retries.","schema":{"type":"integer","minimum":1}},"x-ratelimit-limit":{"description":"Maximum requests in the current minute window.","schema":{"type":"integer","minimum":0}},"x-ratelimit-remaining":{"description":"Remaining requests in the current window.","schema":{"type":"integer","minimum":0}},"x-ratelimit-reset":{"description":"Seconds until the current window resets.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"temporarily_unavailable: request limit enforcement is unavailable, or job submission is busy. Retry after 5 seconds.","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}},"retry-after":{"description":"Seconds to wait before retrying. If an Idempotency-Key was supplied, reuse it for job retries.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateJob"},"examples":{"mediaUrl":{"summary":"Media URL","value":{"media_url":"https://example.com/video.mp4"}},"uploadedFile":{"summary":"Uploaded file","value":{"upload_id":"f2ef591b-135b-46fa-a604-3d4fda5bfbfb"}}}}}},"parameters":[{"name":"Idempotency-Key","in":"header","schema":{"type":"string","minLength":1,"maxLength":255,"pattern":"^[!-~]+$"},"description":"Optional. 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.","required":false}],"callbacks":{"jobOutcome":{"{$request.body#/webhook_url}":{"post":{"summary":"Job completed or cancelled","security":[],"description":"HMAC-SHA256 signed with the submitting API key’s webhook signing secret over `<unix seconds>.<raw body>`. Verify timestamp freshness and compare signatures in constant time. Deduplicate by event id. Return any 2xx within 10 seconds. Failed attempts retry after 1m, 5m, 15m, 1h, 3h, 6h, 12h (eight attempts total). Redirects are failures. Delivery is at least once while retries remain; it is not guaranteed after exhaustion.","parameters":[{"name":"Echo-Event-Id","in":"header","schema":{"type":"string"},"required":true},{"name":"Echo-Event-Type","in":"header","schema":{"type":"string","enum":["job.completed","job.cancelled"]},"required":true},{"name":"Echo-Signature","in":"header","schema":{"type":"string","example":"t=1780000000,v1=<hex HMAC-SHA256>"},"required":true}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Event"}}}},"responses":{"2XX":{"description":"Acknowledged"}}}}}},"description":"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."},"get":{"operationId":"listJobs","summary":"List workspace API jobs, newest first","responses":{"200":{"description":"Success","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"type":"object","properties":{"object":{"type":"string","enum":["list"]},"data":{"type":"array","items":{"$ref":"#/components/schemas/Job"}},"has_more":{"type":"boolean"}},"required":["object","data","has_more"]}}}},"400":{"description":"Invalid request","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or revoked API key","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Insufficient funds or budget","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Key or workspace does not allow this operation","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found in this workspace","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"JSON body exceeds 64 KiB","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Unsupported content type","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Media or order cannot be processed","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Shared read limit per API key or write limit per workspace exceeded","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}},"retry-after":{"description":"Seconds to wait before retrying. If an Idempotency-Key was supplied, reuse it for job retries.","schema":{"type":"integer","minimum":1}},"x-ratelimit-limit":{"description":"Maximum requests in the current minute window.","schema":{"type":"integer","minimum":0}},"x-ratelimit-remaining":{"description":"Remaining requests in the current window.","schema":{"type":"integer","minimum":0}},"x-ratelimit-reset":{"description":"Seconds until the current window resets.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"temporarily_unavailable: request limit enforcement is unavailable, or job submission is busy. Retry after 5 seconds.","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}},"retry-after":{"description":"Seconds to wait before retrying. If an Idempotency-Key was supplied, reuse it for job retries.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1},"description":"Page size. Defaults to 20, maximum 100; both are configurable per workspace."},{"name":"starting_after","in":"query","schema":{"type":"string","format":"uuid"},"description":"Last job ID from the previous page."},{"name":"status","in":"query","schema":{"type":"string","enum":["queued","processing","completed","cancelled"]}}],"description":"Lists API jobs in this workspace, newest first. Status is filtered after pagination; keep paging until has_more is false, even if a page is shorter than limit."}},"/jobs/{id}":{"parameters":[{"name":"id","in":"path","schema":{"type":"string","format":"uuid"},"required":true}],"get":{"operationId":"getJob","summary":"Get job status, cost, and caption links","responses":{"200":{"description":"Success","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"400":{"description":"Invalid request","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or revoked API key","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Insufficient funds or budget","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Key or workspace does not allow this operation","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found in this workspace","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"JSON body exceeds 64 KiB","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Unsupported content type","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Media or order cannot be processed","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Shared read limit per API key or write limit per workspace exceeded","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}},"retry-after":{"description":"Seconds to wait before retrying. If an Idempotency-Key was supplied, reuse it for job retries.","schema":{"type":"integer","minimum":1}},"x-ratelimit-limit":{"description":"Maximum requests in the current minute window.","schema":{"type":"integer","minimum":0}},"x-ratelimit-remaining":{"description":"Remaining requests in the current window.","schema":{"type":"integer","minimum":0}},"x-ratelimit-reset":{"description":"Seconds until the current window resets.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"temporarily_unavailable: request limit enforcement is unavailable, or job submission is busy. Retry after 5 seconds.","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}},"retry-after":{"description":"Seconds to wait before retrying. If an Idempotency-Key was supplied, reuse it for job retries.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/jobs/{id}/captions":{"parameters":[{"name":"id","in":"path","schema":{"type":"string","format":"uuid"},"required":true}],"get":{"operationId":"getCaptions","summary":"Download the latest caption revision","responses":{"200":{"description":"Latest revision. Word transcripts support English, Spanish and French. Download links require bearer authentication.","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}},"ETag":{"schema":{"type":"string"},"description":"Quoted caption revision ID."},"Content-Disposition":{"schema":{"type":"string"},"description":"Attachment filename, omitted for JSON."}},"content":{"application/x-subrip":{"schema":{"type":"string"}},"text/vtt":{"schema":{"type":"string"}},"text/plain":{"schema":{"type":"string"}},"application/vnd.openxmlformats-officedocument.wordprocessingml.document":{"schema":{"type":"string","format":"binary"}},"application/json":{"schema":{"type":"object","properties":{"job_id":{"type":"string","format":"uuid"},"language":{"type":"string","nullable":true},"revision":{"type":"integer"},"captions":{"type":"array","items":{"type":"object","properties":{"start":{"type":"number"},"end":{"type":"number"},"speaker":{"type":"string","nullable":true},"text":{"type":"string"}},"required":["start","end","speaker","text"]}}},"required":["job_id","language","revision","captions"]}}}},"400":{"description":"Invalid request","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or revoked API key","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Insufficient funds or budget","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Key or workspace does not allow this operation","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found in this workspace","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"JSON body exceeds 64 KiB","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Unsupported content type","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Media or format cannot be processed. A job cancelled for a duration mismatch returns unsupported_media.","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Shared read limit per API key or write limit per workspace exceeded","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}},"retry-after":{"description":"Seconds to wait before retrying. If an Idempotency-Key was supplied, reuse it for job retries.","schema":{"type":"integer","minimum":1}},"x-ratelimit-limit":{"description":"Maximum requests in the current minute window.","schema":{"type":"integer","minimum":0}},"x-ratelimit-remaining":{"description":"Remaining requests in the current window.","schema":{"type":"integer","minimum":0}},"x-ratelimit-reset":{"description":"Seconds until the current window resets.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"temporarily_unavailable: request limit enforcement is unavailable, or job submission is busy. Retry after 5 seconds.","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}},"retry-after":{"description":"Seconds to wait before retrying. If an Idempotency-Key was supplied, reuse it for job retries.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"parameters":[{"name":"format","in":"query","schema":{"type":"string","enum":["srt","vtt","txt","docx","json"],"default":"srt"},"description":"srt: timed SubRip captions; vtt: WebVTT for web players; txt: transcript grouped by speaker; docx: Word transcript; json: structured cues for rendering or search."},{"name":"timestamps","in":"query","schema":{"type":"boolean","default":false},"description":"Include timestamps in txt/docx transcripts."}]}},"/account":{"get":{"operationId":"getAccount","summary":"Get workspace, key permissions, and billing balance","responses":{"200":{"description":"Success","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Account"}}}},"400":{"description":"Invalid request","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid or revoked API key","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Insufficient funds or budget","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Key or workspace does not allow this operation","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Resource not found in this workspace","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Conflict","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"413":{"description":"JSON body exceeds 64 KiB","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"415":{"description":"Unsupported content type","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Media or order cannot be processed","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Shared read limit per API key or write limit per workspace exceeded","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}},"retry-after":{"description":"Seconds to wait before retrying. If an Idempotency-Key was supplied, reuse it for job retries.","schema":{"type":"integer","minimum":1}},"x-ratelimit-limit":{"description":"Maximum requests in the current minute window.","schema":{"type":"integer","minimum":0}},"x-ratelimit-remaining":{"description":"Remaining requests in the current window.","schema":{"type":"integer","minimum":0}},"x-ratelimit-reset":{"description":"Seconds until the current window resets.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Internal error","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"temporarily_unavailable: request limit enforcement is unavailable, or job submission is busy. Retry after 5 seconds.","headers":{"request-id":{"description":"Support request identifier.","schema":{"type":"string"}},"cache-control":{"schema":{"type":"string","enum":["no-store"]}},"retry-after":{"description":"Seconds to wait before retrying. If an Idempotency-Key was supplied, reuse it for job retries.","schema":{"type":"integer","minimum":1}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"el_live_<key>"}},"schemas":{"CreateJob":{"type":"object","description":"Provide exactly one source: media_url OR upload_id. Sending both or neither is invalid. Choose the Media URL or Uploaded file variant below.","properties":{"media_url":{"type":"string","minLength":1,"description":"Public HTTP(S) video/audio URL, including supported YouTube links. Required only for the Media URL variant; omit when using upload_id."},"upload_id":{"type":"string","format":"uuid","description":"ID returned by POST /uploads, after uploading the file. Required only for the Uploaded file variant; omit when using media_url."},"title":{"type":"string","minLength":1,"description":"Dashboard title and download filename. Defaults to the generated job ID. Default maximum: 300 characters, configurable per workspace."},"style":{"type":"string","enum":["clean","verbatim"],"default":"clean","description":"clean removes fillers, false starts, and stutters; verbatim keeps every spoken word."},"model":{"type":"string","enum":["ave-base"],"default":"ave-base","description":"Captioning model. Only ave-base is supported."},"speaker_labels":{"type":"boolean","default":true,"description":"Identify speaker turns. Set false for dialogue without labels."},"speaker_label_style":{"type":"string","enum":["gt_name","brackets","colon","dashes"],"default":"gt_name","description":"SRT/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."},"atmospherics":{"type":"boolean","default":true,"description":"Include meaningful non-speech sounds. Uses the same add-on pricing as dashboard checkout."},"profanity":{"type":"string","enum":["as_spoken","mask","label","omit"],"default":"as_spoken","description":"Keep profanity, mask it (f***), replace it with [expletive], or omit it. Does not alter source audio."},"redactions":{"$ref":"#/components/schemas/Redactions"},"glossary":{"type":"array","items":{"type":"string","minLength":1},"default":[],"description":"Names and terms with preferred spelling, used where the audio supports them. Defaults to at most 200 terms of 100 characters each; configurable per workspace."},"webhook_url":{"type":"string","format":"uri","maxLength":2048,"pattern":"^https://","description":"Public HTTPS callback. Redirects are not followed."},"metadata":{"type":"object","additionalProperties":{"type":"string"},"description":"Your 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."}},"additionalProperties":false,"oneOf":[{"title":"Media URL","required":["media_url"],"not":{"required":["upload_id"]}},{"title":"Uploaded file","required":["upload_id"],"not":{"required":["media_url"]}}]},"Job":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"object":{"type":"string","enum":["job"]},"status":{"type":"string","enum":["queued","processing","completed","cancelled"]},"progress":{"type":"integer","minimum":0,"maximum":100,"nullable":true},"eta":{"type":"string","format":"date-time","nullable":true},"title":{"type":"string"},"media":{"type":"object","properties":{"type":{"type":"string","enum":["url","upload"]},"url":{"type":"string","nullable":true},"upload_id":{"type":"string","format":"uuid","nullable":true},"duration_seconds":{"type":"number"}},"required":["type","url","upload_id","duration_seconds"]},"language":{"type":"string","nullable":true},"options":{"type":"object","properties":{"style":{"type":"string","enum":["clean","verbatim"],"default":"clean","description":"clean removes fillers, false starts, and stutters; verbatim keeps every spoken word."},"model":{"type":"string","enum":["ave-base"],"default":"ave-base","description":"Captioning model. Only ave-base is supported."},"speaker_labels":{"type":"boolean","default":true,"description":"Identify speaker turns. Set false for dialogue without labels."},"speaker_label_style":{"type":"string","enum":["gt_name","brackets","colon","dashes"],"default":"gt_name","description":"SRT/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."},"atmospherics":{"type":"boolean","default":true,"description":"Include meaningful non-speech sounds. Uses the same add-on pricing as dashboard checkout."},"profanity":{"type":"string","enum":["as_spoken","mask","label","omit"],"default":"as_spoken","description":"Keep profanity, mask it (f***), replace it with [expletive], or omit it. Does not alter source audio."},"redactions":{"$ref":"#/components/schemas/Redactions"},"glossary":{"type":"array","items":{"type":"string"}},"webhook_url":{"type":"string","nullable":true}},"required":["style","model","speaker_labels","speaker_label_style","atmospherics","profanity","redactions","glossary","webhook_url"]},"cost":{"type":"object","properties":{"amount":{"type":"string","description":"Decimal amount in USD, net of refunds."},"currency":{"type":"string","enum":["usd"]}},"required":["amount","currency"],"nullable":true},"cancellation":{"type":"object","properties":{"reason":{"type":"string","enum":["unsupported_language","unsupported_media","unusable_media","media_unavailable","deleted","not_started"]},"message":{"type":"string"}},"required":["reason","message"],"nullable":true},"captions":{"type":"object","properties":{"srt":{"type":"string","format":"uri"},"vtt":{"type":"string","format":"uri"},"txt":{"type":"string","format":"uri"},"docx":{"type":"string","format":"uri"},"json":{"type":"string","format":"uri"}},"required":["srt","vtt","txt","docx","json"],"nullable":true},"metadata":{"type":"object","additionalProperties":{"type":"string"},"description":"String values. Defaults: 20 keys of 1–40 characters, values up to 500 characters. These maxima are configurable per workspace."},"created_at":{"type":"string","format":"date-time"},"completed_at":{"type":"string","format":"date-time","nullable":true}},"required":["id","object","status","progress","eta","title","media","language","options","cost","cancellation","captions","metadata","created_at","completed_at"]},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"},"param":{"type":"string"}},"required":["code","message"]}},"required":["error"]},"Upload":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"object":{"type":"string","enum":["upload"]},"upload_url":{"type":"string","format":"uri","description":"Presigned URL for uploading raw file bytes with PUT. No Authorization or storage-specific headers are needed."},"method":{"type":"string","enum":["PUT"]},"max_size_bytes":{"type":"integer","enum":[5242880000]},"expires_at":{"type":"string","format":"date-time"}},"required":["id","object","upload_url","method","max_size_bytes","expires_at"]},"Account":{"type":"object","properties":{"object":{"type":"string","enum":["account"]},"workspace":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"}},"required":["id","name"]},"key":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"name":{"type":"string"},"access":{"type":"string","enum":["full","read_only"]}},"required":["id","name","access"]},"billing":{"type":"object","properties":{"mode":{"type":"string","enum":["prepaid","invoiced"],"nullable":true},"balance":{"type":"string","nullable":true},"currency":{"type":"string","enum":["usd"]},"rate_per_minute":{"type":"string","nullable":true}},"required":["mode","balance","currency","rate_per_minute"]}},"required":["object","workspace","key","billing"]},"Event":{"type":"object","properties":{"id":{"type":"string","pattern":"^evt_"},"object":{"type":"string","enum":["event"]},"type":{"type":"string","enum":["job.completed","job.cancelled"]},"created_at":{"type":"string","format":"date-time"},"data":{"$ref":"#/components/schemas/Job"}},"required":["id","object","type","created_at","data"]},"Redactions":{"type":"object","additionalProperties":false,"description":"Privacy controls for caption text, using the same redaction pricing as checkout. Source audio and video are unchanged.","properties":{"pii":{"type":"boolean","default":false,"description":"Redact personal data such as emails and phone numbers."},"names":{"type":"boolean","default":false,"description":"Redact named individuals."},"organizations":{"type":"boolean","default":false,"description":"Redact organization names."},"terms":{"type":"array","default":[],"maxItems":200,"items":{"type":"string","minLength":1,"maxLength":200},"description":"Custom terms to redact, one term per item; each must be a nonblank single line."},"replacement":{"type":"string","enum":["redacted","category_label","silent","custom_string"],"default":"category_label","description":"Replace with [REDACTED], a category such as [EMAIL], nothing, or custom_replacement."},"custom_replacement":{"type":"string","minLength":1,"maxLength":120,"description":"Required when replacement is custom_string. Nonblank, single-line text."}},"oneOf":[{"title":"Standard replacement","not":{"required":["replacement"],"properties":{"replacement":{"enum":["custom_string"]}}}},{"title":"Custom replacement","required":["replacement","custom_replacement"],"properties":{"replacement":{"enum":["custom_string"]}}}]}}}}