{"openapi":"3.1.0","info":{"title":"Videxo API","version":"v1","description":"Run video jobs over HTTP, described as JSON operations or as an ffmpeg command. Every error answers RFC 9457 problem details (`application/problem+json`) with a documented `code`."},"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"An API key from the dashboard: `Authorization: Bearer vdx_...`."},"client_token":{"type":"http","scheme":"bearer","description":"A client token your server minted with `POST /v1/client-tokens`: `Authorization: Bearer vdx_ct_...`."}},"schemas":{"Problem":{"type":"object","properties":{"type":{"type":"string","description":"`https://videxo.io/docs/errors#<code>`, the docs entry for the code."},"title":{"type":"string","description":"The code's fixed sentence."},"status":{"type":"integer","description":"The HTTP status, repeated."},"detail":{"type":"string","description":"What happened this time, for people; it may change."},"code":{"type":"string","enum":["authentication_failed","permission_denied","invalid_request","command_invalid","not_found","conflict","resource_expired","limit_exceeded","usage_cap_reached","out_of_credits","rate_limited","service_unavailable","internal_error"],"description":"The stable error code. Programs branch on this."},"reason":{"type":"string","enum":["missing_api_key","invalid_api_key","api_key_revoked","api_key_expired","missing_client_token","invalid_client_token","client_token_expired","client_token_superseded","client_token_revoked","missing_credentials","invalid_token","token_expired","token_revoked","account_disabled","link_invalid","origin_not_allowed","role_insufficient","token_scope","client_token_required","insufficient_scope","invalid_fields","not_json","range_not_satisfiable","size_mismatch","job","file","output","upload","webhook_endpoint","webhook_delivery","route","subscription","ticket","client_token","job_active","upload_used","webhook_endpoint_exists","webhook_delivery_pending","idempotency_key_reused","checkout_pending","subscription_exists","same_plan","ticket_closed","link_expired","file_expired","upload_expired","request_body_size","upload_size","input_size","output_size","job_duration","low_balance","member_limit","organization_limit","token_uploads","subtitles_size","temporary","cancel_unconfirmed","queue_timeout","url_refused","http_status","network","redirects","too_slow","ffmpeg_error","output_empty","time_past_end","subtitles_invalid","media_unreadable"],"description":"The documented finer case of the code, when it has one (the Errors page lists each code's reasons)."},"retryable":{"type":"boolean","description":"Whether sending the same request again later can succeed without a change."},"request_id":{"type":"string","description":"The id of this request, also in the `Request-Id` header. Quote it to support."},"errors":{"type":"array","items":{"$ref":"#/components/schemas/FieldError"},"description":"With `invalid_request`: one entry per field that failed."},"problems":{"type":"array","items":{"$ref":"#/components/schemas/CommandProblem"},"description":"With `command_invalid`: why the command was refused."}},"required":["type","title","status","detail","code","retryable","request_id"],"description":"Every error answer: RFC 9457 problem details, `Content-Type: application/problem+json`."},"FieldError":{"type":"object","properties":{"detail":{"type":"string","description":"What is wrong with this field."},"pointer":{"type":"string","description":"A JSON Pointer into the body, as a URI fragment: `#/outputs/0/resize/fit`; `#` is the whole body."},"parameter":{"type":"string","description":"The query or path parameter, such as `cursor`."},"header":{"type":"string","description":"The request header, such as `Idempotency-Key`."}},"required":["detail"],"description":"One field that failed: `detail` and exactly one of `pointer`, `parameter` or `header`."},"CommandProblem":{"type":"object","properties":{"code":{"type":"string","description":"Stable command validation code, e.g. `filter_forbidden` (docs: command rules)."},"message":{"type":"string"},"option":{"type":"string"},"filter":{"type":"string"}},"required":["code","message"]},"FontList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Font"}}},"required":["data"]},"Font":{"type":"object","properties":{"id":{"type":"string","description":"The id a text layer names as `font`.","example":"inter-bold"},"family":{"type":"string","example":"Inter"},"weight":{"anyOf":[{"type":"number","enum":[400]},{"type":"number","enum":[700]}],"description":"400 regular, 700 bold."},"scripts":{"type":"array","items":{"type":"string","enum":["latin","greek","cyrillic"]},"description":"The scripts the font covers in full."},"license":{"type":"string","enum":["OFL-1.1"],"description":"The SIL Open Font License 1.1."}},"required":["id","family","weight","scripts","license"]},"ClientTokenInfo":{"type":"object","properties":{"id":{"type":"string","pattern":"^ct_[a-z0-9]{24}$","description":"The id of a client token.","example":"ct_4m8x2k9q0c3v7n1r5t6b2z8w"},"chain_id":{"type":"string","pattern":"^ct_[a-z0-9]{24}$","description":"The id of a client token.","example":"ct_4m8x2k9q0c3v7n1r5t6b2z8w"},"expires_at":{"type":"string","format":"date-time"},"uploads":{"type":["object","null"],"properties":{"max_count":{"type":"integer"},"max_size_bytes":{"type":"integer"},"content_types":{"type":"array","items":{"type":"string"}},"used":{"type":"integer","minimum":0,"description":"Uploads created over the whole chain."}},"required":["max_count","max_size_bytes","content_types","used"]},"jobs":{"type":["object","null"],"properties":{"read":{"type":"array","items":{"type":"string","pattern":"^job_[a-z0-9]{24}$","description":"`job_` and 24 lowercase letters and digits.","example":"job_3k9x0c2mfq8w1n7r5t4b6v2z"}}},"required":["read"]}},"required":["id","chain_id","expires_at","uploads","jobs"]},"Upload":{"type":"object","properties":{"id":{"type":"string","pattern":"^up_[a-f0-9]{24}$"},"input_url":{"type":"string","pattern":"^videxo:\\/\\/uploads\\/(up_[a-f0-9]{24})$"},"upload_url":{"type":"string","format":"uri"},"upload_url_expires_at":{"type":"string","format":"date-time"},"expires_at":{"type":"string","format":"date-time"},"max_size_bytes":{"type":"integer","exclusiveMinimum":0}},"required":["id","input_url","upload_url","upload_url_expires_at","expires_at","max_size_bytes"]},"CreateUploadRequest":{"type":"object","properties":{"filename":{"type":"string","minLength":1,"maxLength":105,"pattern":"^[A-Za-z0-9][A-Za-z0-9_.-]*$"},"size_bytes":{"type":"integer","exclusiveMinimum":0,"description":"Exact byte length. At most 100 MB and the plan input limit."},"content_type":{"type":"string","maxLength":128,"pattern":"^[a-zA-Z0-9!#$&^_.+-]+\\/[a-zA-Z0-9!#$&^_.+-]+$","default":"application/octet-stream"}},"required":["filename","size_bytes"],"additionalProperties":false},"ClientJob":{"type":"object","properties":{"id":{"type":"string","pattern":"^job_[a-z0-9]{24}$","description":"`job_` and 24 lowercase letters and digits.","example":"job_3k9x0c2mfq8w1n7r5t4b6v2z"},"state":{"$ref":"#/components/schemas/JobState"},"progress":{"type":["number","null"],"minimum":0,"maximum":1},"error":{"$ref":"#/components/schemas/JobError"},"outputs":{"type":"array","items":{"$ref":"#/components/schemas/ClientJobOutput"}},"created_at":{"type":"string","format":"date-time"},"started_at":{"type":["string","null"],"format":"date-time"},"finished_at":{"type":["string","null"],"format":"date-time"}},"required":["id","state","progress","error","outputs","created_at","started_at","finished_at"]},"JobState":{"type":"string","enum":["queued","running","succeeded","failed","cancelled"],"description":"queued and running are active; the others are final."},"JobError":{"type":["object","null"],"properties":{"code":{"type":"string","enum":["limit_exceeded","usage_cap_reached","out_of_credits","service_unavailable","internal_error","input_unreachable","processing_failed"],"description":"The stable error code (the Errors page lists each one)."},"reason":{"type":["string","null"],"enum":["missing_api_key","invalid_api_key","api_key_revoked","api_key_expired","missing_client_token","invalid_client_token","client_token_expired","client_token_superseded","client_token_revoked","missing_credentials","invalid_token","token_expired","token_revoked","account_disabled","link_invalid","origin_not_allowed","role_insufficient","token_scope","client_token_required","insufficient_scope","invalid_fields","not_json","range_not_satisfiable","size_mismatch","job","file","output","upload","webhook_endpoint","webhook_delivery","route","subscription","ticket","client_token","job_active","upload_used","webhook_endpoint_exists","webhook_delivery_pending","idempotency_key_reused","checkout_pending","subscription_exists","same_plan","ticket_closed","link_expired","file_expired","upload_expired","request_body_size","upload_size","input_size","output_size","job_duration","low_balance","member_limit","organization_limit","token_uploads","subtitles_size","temporary","cancel_unconfirmed","queue_timeout","url_refused","http_status","network","redirects","too_slow","ffmpeg_error","output_empty","time_past_end","subtitles_invalid","media_unreadable",null],"description":"The documented finer case of the code, or null."},"message":{"type":"string","description":"What happened, for people; it may change."},"retryable":{"type":"boolean","description":"Whether creating the same job again can succeed without a change."},"log_tail":{"type":["string","null"],"description":"With `processing_failed` `ffmpeg_error`: ffmpeg's last lines about the media, once available; null otherwise."}},"required":["code","reason","message","retryable","log_tail"]},"ClientJobOutput":{"type":"object","properties":{"alias":{"type":"string"},"filename":{"type":"string"},"size_bytes":{"type":"integer","minimum":0},"content_type":{"type":"string"},"expires_at":{"type":"string","format":"date-time"},"deleted_at":{"type":["string","null"],"format":"date-time"},"download_url":{"type":["string","null"],"format":"uri","description":"Signed download URL; null after deletion or retention."},"download_url_expires_at":{"type":["string","null"],"format":"date-time"}},"required":["alias","filename","size_bytes","content_type","expires_at","deleted_at","download_url","download_url_expires_at"]},"ClientJobList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ClientJob"},"description":"The jobs the token may read, newest first."}},"required":["data"]},"Credits":{"type":"object","properties":{"plan":{"type":"string","enum":["payg","starter","pro","scale"],"description":"`payg` (Pay as you go), `starter`, `pro` or `scale`."},"balance":{"type":"number","description":"Credits left, with one decimal: the balance as of `as_of`, less the usage of jobs since."},"reserved":{"type":["number","null"],"description":"Credits held by running jobs; null when it could not be read this time."},"available":{"type":["number","null"],"description":"`balance` minus `reserved`; null with `reserved`."},"as_of":{"type":["string","null"],"format":"date-time","description":"When the billing ledger last changed the balance; null before it has any entry."},"buckets":{"type":"array","items":{"$ref":"#/components/schemas/CreditBucket"},"description":"Buckets with credits left as of `as_of`, the one that expires first first."},"cycle":{"type":["object","null"],"properties":{"start":{"type":"string","format":"date-time"},"end":{"type":"string","format":"date-time"},"plan_credits":{"type":"integer","description":"The plan's credits a cycle."}},"required":["start","end","plan_credits"],"description":"A subscriber's current billing cycle; null on Pay as you go."},"overage":{"type":["object","null"],"properties":{"used":{"type":"number","description":"Overage credits used in the cycle, with one decimal."},"cap_credits":{"type":"integer","description":"The most overage credits the plan's cap allows in a cycle."},"run_out":{"type":"string","enum":["overage","top_up_first","auto_upgrade","hard_stop"],"description":"What happens when the plan's credits run out: `overage`, `top_up_first`, `auto_upgrade` or `hard_stop`."}},"required":["used","cap_credits","run_out"],"description":"A subscriber's overage; null on Pay as you go, which has none."}},"required":["plan","balance","reserved","available","as_of","buckets","cycle","overage"],"description":"The account's credits by bucket."},"CreditBucket":{"type":"object","properties":{"id":{"type":"string","description":"The grant id."},"kind":{"type":"string","enum":["free","subscription","top_up","auto_top_up","adjustment"],"description":"`free` (the one-time free credits), `subscription` (a plan cycle), `top_up` (a pack), `auto_top_up` (a pack bought by auto top-up) or `adjustment` (support)."},"granted":{"type":"number","description":"Credits granted, with one decimal."},"remaining":{"type":"number","description":"Credits not used yet, as of `as_of`, with one decimal."},"granted_at":{"type":"string","format":"date-time"},"expires_at":{"type":["string","null"],"format":"date-time","description":"After this time the remaining credits are gone; null: they do not expire."}},"required":["id","kind","granted","remaining","granted_at","expires_at"],"description":"One grant of credits."},"CompileResult":{"type":"object","properties":{"spec":{"$ref":"#/components/schemas/JobSpec"},"command":{"type":["string","null"],"description":"The compiled ffmpeg command, without metadata outputs; null when every output is metadata."},"input_files":{"type":["object","null"],"additionalProperties":{"type":"string"}},"output_files":{"type":["object","null"],"additionalProperties":{"type":"string"}},"ffmpeg_command":{"type":["string","null"],"description":"One shell line for a local ffmpeg; an upload input appears as `./<input name>.upload`, since compile never looks uploads up. Null when every output is metadata."},"steps":{"type":"array","items":{"$ref":"#/components/schemas/JobStep"},"description":"What a job would run, in order."}},"required":["spec","command","input_files","output_files","ffmpeg_command","steps"]},"JobSpec":{"type":"object","properties":{"inputs":{"type":"object","additionalProperties":{"anyOf":[{"type":"object","properties":{"url":{"type":"string"}},"required":["url"]},{"type":"object","properties":{"upload_id":{"type":"string"}},"required":["upload_id"]}]}},"outputs":{"type":"array","items":{"$ref":"#/components/schemas/Output"}}},"required":["inputs","outputs"],"description":"The operations body as accepted: presets expanded, defaults filled, times in seconds; `preset` stays to show where values came from."},"Output":{"description":"An output: one schema per `type` (`video`, `audio`, `image`, `storyboard`, `gif`, `metadata`, `scenes`), or a preset of that type without `type`. A field the type does not take is refused with its pointer.","oneOf":[{"$ref":"#/components/schemas/VideoOutput"},{"$ref":"#/components/schemas/AudioOutput"},{"$ref":"#/components/schemas/ImageOutput"},{"$ref":"#/components/schemas/StoryboardOutput"},{"$ref":"#/components/schemas/GifOutput"},{"$ref":"#/components/schemas/MetadataOutput"},{"$ref":"#/components/schemas/ScenesOutput"},{"$ref":"#/components/schemas/PresetVideoOutput"},{"$ref":"#/components/schemas/PresetAudioOutput"},{"$ref":"#/components/schemas/PresetImageOutput"},{"$ref":"#/components/schemas/PresetGifOutput"}]},"TextLayer":{"type":"object","properties":{"text":{"type":"string","description":"The text, 1 to 500 characters and at most 6 lines (`\\n`).","example":"Launch day"},"font":{"type":"string","enum":["inter","inter-bold","roboto","roboto-bold","open-sans","open-sans-bold","montserrat","montserrat-bold","poppins","poppins-bold","oswald","oswald-bold","bebas-neue","playfair-display","playfair-display-bold","merriweather","merriweather-bold","noto-sans","noto-sans-bold","noto-serif","noto-serif-bold","jetbrains-mono","jetbrains-mono-bold"],"description":"A font id from `GET /v1/fonts` (default `inter`)."},"size":{"type":"integer","minimum":8,"maximum":1000,"description":"The font size in pixels (default 48)."},"color":{"anyOf":[{"type":"string","enum":["black","white"]},{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}],"description":"The text colour (default `#FFFFFF`)."},"opacity":{"type":"number","minimum":0,"maximum":1,"description":"The text opacity, 0 to 1 (default 1)."},"line_height":{"type":"number","minimum":1,"maximum":3,"description":"The distance between lines, times `size` (default 1.25)."},"position":{"type":"string","enum":["top-left","top","top-right","left","center","right","bottom-left","bottom","bottom-right"],"description":"Where the text sits (default `center`); lines align to its side."},"margin":{"type":"integer","minimum":0,"maximum":1000,"description":"Pixels from the edges `position` touches (default 48)."},"offset_x":{"type":"integer","minimum":-7680,"maximum":7680,"description":"Pixels to move right (negative: left)."},"offset_y":{"type":"integer","minimum":-7680,"maximum":7680,"description":"Pixels to move down (negative: up)."},"box":{"type":"object","properties":{"color":{"anyOf":[{"type":"string","enum":["black","white"]},{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}],"description":"`black`, `white` or `#RRGGBB`."},"opacity":{"type":"number","minimum":0,"maximum":1},"padding":{"type":"integer","minimum":0,"maximum":200}},"additionalProperties":false,"description":"A box behind each line: `color` (default `black`), `opacity` (0.5), `padding` in pixels (16)."},"outline":{"type":"object","properties":{"width":{"type":"integer","minimum":1,"maximum":20},"color":{"anyOf":[{"type":"string","enum":["black","white"]},{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}],"description":"`black`, `white` or `#RRGGBB`."}},"additionalProperties":false,"description":"An outline around the letters: `width` in pixels (default 2), `color` (default `black`)."},"shadow":{"type":"object","properties":{"x":{"type":"integer","minimum":-50,"maximum":50},"y":{"type":"integer","minimum":-50,"maximum":50},"color":{"anyOf":[{"type":"string","enum":["black","white"]},{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}],"description":"`black`, `white` or `#RRGGBB`."},"opacity":{"type":"number","minimum":0,"maximum":1}},"additionalProperties":false,"description":"A drop shadow: `x` and `y` in pixels (default 2), `color` (default `black`), `opacity` (0.5)."},"start":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"When the text appears, on the output's timeline (a part's own on a part).","example":90},"end":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"When the text goes; the end of the output by default.","example":90},"fade":{"type":"object","properties":{"in":{"type":"number","minimum":0.1,"maximum":60},"out":{"type":"number","minimum":0.1,"maximum":60}},"additionalProperties":false,"description":"Seconds of fade in and fade out; `out` needs `end`."}},"required":["text"],"additionalProperties":false,"description":"Text drawn into the picture."},"Transition":{"type":"object","properties":{"type":{"type":"string","enum":["fade","fade-black","fade-white","dissolve","wipe-left","wipe-right","wipe-up","wipe-down","slide-left","slide-right","slide-up","slide-down","circle-open","circle-close","radial","zoom-in","pixelize"]},"duration":{"type":"number","minimum":0.1,"maximum":5,"description":"Seconds the two parts overlap, 0.1 to 5 (default 1)."}},"required":["type"],"additionalProperties":false,"description":"A transition from the part before into this one, picture and sound."},"Subtitles":{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"The input holding an SRT or WebVTT file (UTF-8, at most 1 MB); no other field of the job may read it."},"font":{"type":"string","enum":["inter","inter-bold","roboto","roboto-bold","open-sans","open-sans-bold","montserrat","montserrat-bold","poppins","poppins-bold","oswald","oswald-bold","bebas-neue","playfair-display","playfair-display-bold","merriweather","merriweather-bold","noto-sans","noto-sans-bold","noto-serif","noto-serif-bold","jetbrains-mono","jetbrains-mono-bold"],"description":"A font id from `GET /v1/fonts` (default `inter`)."},"size":{"type":"integer","minimum":8,"maximum":400,"description":"The font size in pixels on a 1,080-line frame (default 48), libass's: the height of a line."},"color":{"anyOf":[{"type":"string","enum":["black","white"]},{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}],"description":"The text colour (default `#FFFFFF`)."},"outline":{"type":"object","properties":{"width":{"type":"integer","minimum":0,"maximum":20},"color":{"anyOf":[{"type":"string","enum":["black","white"]},{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}],"description":"`black`, `white` or `#RRGGBB`."}},"additionalProperties":false,"description":"The outline around the letters: `width` in pixels on a 1,080-line frame (default 2; 0 for none), `color` (default `black`)."},"position":{"type":"string","enum":["bottom","top"],"description":"Where the lines sit, centred: `bottom` (default) or `top`."},"margin":{"type":"integer","minimum":0,"maximum":1000,"description":"Pixels from the bottom or top edge on a 1,080-line frame (default 48)."}},"required":["input"],"additionalProperties":false,"description":"Captions from an SRT or WebVTT input, burned into the picture at their cue times."},"JobStep":{"type":"object","properties":{"tool":{"type":"string","enum":["ffmpeg","ffprobe"],"description":"The open source tool the step runs. More tools join as they ship."},"inputs":{"type":"array","items":{"type":"string"},"description":"The job's inputs the step reads, by name."},"outputs":{"type":"array","items":{"type":"string"},"description":"The job's outputs the step writes, by name."},"command":{"type":["string","null"],"description":"One shell line that runs the step with a local ffmpeg; null for every other tool."}},"required":["tool","inputs","outputs","command"]},"CompileRequest":{"anyOf":[{"$ref":"#/components/schemas/OperationsJobRequest"},{"type":"object","properties":{"preset":{"type":"string","pattern":"^[a-z0-9-]{1,40}(?:@\\d{4}-\\d{2}-\\d{2})?$","description":"A preset name (`GET /v1/presets`); its options are the defaults and the output's own fields win."},"filename":{"type":"string","minLength":1,"maxLength":105,"description":"The stored file name, `<name>.<format>` by default; one extension, matching `format`."},"format":{"type":"string","enum":["mp4","mov","webm","mkv","ts","mp3","m4a","aac","wav","flac","ogg","opus","jpg","png","gif","json"],"description":"The container or image format; from `filename`, or the type's default."},"strip_metadata":{"type":"boolean","description":"Drop the input's global and stream metadata (GPS, device tags)."},"trim":{"type":"object","properties":{"start":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"end":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"duration":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90}},"additionalProperties":false,"description":"The part of the input to use: `start`, and `end` or `duration`."},"crop":{"type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":7680},"y":{"type":"integer","minimum":0,"maximum":7680},"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680}},"required":["x","y","width","height"],"additionalProperties":false,"description":"A rectangle of the input frame, in input pixels."},"rotate":{"anyOf":[{"type":"number","enum":[90]},{"type":"number","enum":[180]},{"type":"number","enum":[270]}],"description":"Degrees clockwise."},"flip":{"type":"string","enum":["horizontal","vertical"],"description":"Mirror the picture."},"resize":{"type":"object","properties":{"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680},"aspect":{"type":"string","enum":["16:9","9:16","1:1","4:5","4:3","3:4"]},"fit":{"type":"string","enum":["contain","cover","pad"]},"anchor":{"type":"string","enum":["center","top","bottom","left","right"]},"pad_color":{"anyOf":[{"type":"string","enum":["black","white"]},{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}],"description":"`black`, `white` or `#RRGGBB`."},"enlarge":{"type":"boolean","description":"Scale a smaller input up to the size (default true); false keeps it at its size, never larger."}},"additionalProperties":false,"description":"A new size: `width`, `height`, `aspect`, and how the picture fits (`fit`)."},"speed":{"type":"number","minimum":0.25,"maximum":4,"description":"How fast it plays, 0.25 to 4; the sound keeps its pitch."},"fps":{"type":"number","minimum":1,"maximum":120,"description":"A constant frame rate."},"color":{"type":"object","properties":{"brightness":{"type":"number","minimum":-1,"maximum":1},"contrast":{"type":"number","minimum":0,"maximum":3},"saturation":{"type":"number","minimum":0,"maximum":3},"gamma":{"type":"number","minimum":0.1,"maximum":10},"hue":{"type":"number","minimum":-180,"maximum":180}},"additionalProperties":false,"description":"Brightness, contrast, saturation, gamma and hue."},"sharpen":{"type":"object","properties":{"amount":{"type":"number","minimum":0,"maximum":3},"size":{"anyOf":[{"type":"number","enum":[3]},{"type":"number","enum":[5]},{"type":"number","enum":[7]}]}},"additionalProperties":false,"description":"An unsharp mask."},"blur":{"type":"object","properties":{"strength":{"type":"integer","minimum":1,"maximum":50},"regions":{"type":"array","items":{"type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":7680},"y":{"type":"integer","minimum":0,"maximum":7680},"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680}},"required":["x","y","width","height"],"additionalProperties":false},"minItems":1,"maxItems":4}},"required":["strength"],"additionalProperties":false,"description":"A box blur of the whole frame, or of up to 4 regions."},"overlays":{"type":"array","items":{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"position":{"type":"string","enum":["top-left","top","top-right","left","center","right","bottom-left","bottom","bottom-right"]},"margin":{"type":"integer","minimum":0,"maximum":1000},"width":{"type":"integer","minimum":8,"maximum":7680},"opacity":{"type":"number","minimum":0,"maximum":1},"start":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"end":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90}},"required":["input"],"additionalProperties":false},"minItems":1,"maxItems":4,"description":"Images or videos drawn over the picture, in order."},"text":{"type":"array","items":{"$ref":"#/components/schemas/TextLayer"},"minItems":1,"maxItems":8,"description":"Up to 8 text layers, drawn after overlays in order."},"subtitles":{"$ref":"#/components/schemas/Subtitles"},"fade":{"type":"object","properties":{"in":{"type":"number","minimum":0.1,"maximum":60},"out":{"type":"number","minimum":0.1,"maximum":60},"color":{"type":"string","enum":["black","white"]}},"additionalProperties":false,"description":"Fade in at the start and out at the end; `out` needs `trim.duration` or `trim.end`."},"video":{"type":"object","properties":{"codec":{"type":"string","enum":["h264","h265","vp9","av1","copy"]},"quality":{"type":"string","enum":["low","medium","high","lossless"]},"crf":{"type":"integer","minimum":0,"maximum":63},"encoder_preset":{"type":"string","enum":["ultrafast","superfast","veryfast","faster","fast","medium","slow"]},"max_bitrate":{"type":"string","pattern":"^(\\d{1,6})(?:\\.(\\d{1,3}))?([kM])$"},"pixel_format":{"type":"string","enum":["yuv420p","yuv422p","yuv444p","yuv420p10le"]},"faststart":{"type":"boolean"}},"additionalProperties":false,"description":"The video encoder: codec, quality or CRF, preset, maximum bitrate, pixel format."},"audio":{"anyOf":[{"type":"boolean","enum":[false]},{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"codec":{"type":"string","enum":["aac","mp3","opus","vorbis","flac","alac","pcm","copy"]},"quality":{"type":"string","enum":["low","medium","high"]},"bitrate":{"type":"string","pattern":"^(\\d{1,6})(?:\\.(\\d{1,3}))?([kM])$"},"sample_rate":{"type":"integer","minimum":8000,"maximum":192000},"channels":{"anyOf":[{"type":"number","enum":[1]},{"type":"number","enum":[2]}]},"volume":{"type":"number","minimum":0,"maximum":4},"normalize":{"anyOf":[{"type":"boolean","enum":[true]},{"type":"object","properties":{"loudness":{"type":"number","minimum":-70,"maximum":-5},"true_peak":{"type":"number","minimum":-9,"maximum":0},"range":{"type":"number","minimum":1,"maximum":20}},"additionalProperties":false}]},"mix":{"type":"array","items":{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"volume":{"type":"number","minimum":0,"maximum":4}},"required":["input"],"additionalProperties":false},"minItems":1,"maxItems":4}},"additionalProperties":false}],"description":"`false` for no sound, or the audio encoder and filters."},"visualize":{"type":"object","properties":{"style":{"type":"string","enum":["waveform","spectrum"]},"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680},"fps":{"type":"integer","minimum":1,"maximum":60}},"required":["style"],"additionalProperties":false,"description":"A waveform or spectrum video drawn from the input's sound."},"at":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"},{"type":"string","enum":["auto"]}],"description":"The frame time, or `\"auto\"` for the most representative of the first 300 frames."},"times":{"type":"array","items":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"minItems":1,"maxItems":16,"description":"One image per time, `<name>_1`, `<name>_2`, ...; not with `at`."},"quality":{"type":"string","enum":["low","medium","high"],"description":"JPEG quality; PNG ignores it."},"interval":{"type":"number","minimum":0.5,"maximum":3600,"description":"Seconds between frames."},"columns":{"type":"integer","minimum":1,"maximum":16,"description":"Frames across."},"rows":{"type":"integer","minimum":1,"maximum":16,"description":"Frames down."},"tile_width":{"type":"integer","minimum":16,"maximum":640,"description":"Each frame fits in a square of this many pixels."},"exact_times":{"type":"boolean","description":"Decode every frame for exact tile times, instead of key frames only."},"colors":{"type":"integer","minimum":2,"maximum":256,"description":"Colours in the palette."},"threshold":{"type":"number","minimum":1,"maximum":100,"description":"The score, 1 to 100, at which a frame starts a new scene (default 10, scdet's)."},"extra_inputs":{"type":"object","additionalProperties":{"anyOf":[{"type":"string"},{"type":"string","pattern":"^videxo:\\/\\/uploads\\/(up_[a-f0-9]{24})$"},{"type":"object","properties":{"url":{"type":"string"}},"required":["url"],"additionalProperties":false},{"type":"object","properties":{"upload_id":{"type":"string","pattern":"^up_[a-f0-9]{24}$"}},"required":["upload_id"],"additionalProperties":false}],"description":"An http or https URL, `videxo://uploads/<upload_id>`, `{ \"url\" }` or `{ \"upload_id\" }`."}},"webhook_url":{"type":["string","null"],"maxLength":2048,"format":"uri","description":"An https URL that gets the job when it ends (M4)."},"metadata":{"type":"object","additionalProperties":{"type":"string","maxLength":500},"description":"Your own string pairs, returned with the job and its webhook: at most 20 keys of up to 40 characters, values up to 500.","example":{"order":"1234"}},"input":{"anyOf":[{"type":"string"},{"type":"string","pattern":"^videxo:\\/\\/uploads\\/(up_[a-f0-9]{24})$"},{"type":"object","properties":{"url":{"type":"string"}},"required":["url"],"additionalProperties":false},{"type":"object","properties":{"upload_id":{"type":"string","pattern":"^up_[a-f0-9]{24}$"}},"required":["upload_id"],"additionalProperties":false}],"description":"An http or https URL, `videxo://uploads/<upload_id>`, `{ \"url\" }` or `{ \"upload_id\" }`."},"operation":{"type":"string","enum":["transcode"],"description":"The per-operation endpoint whose body this is."}},"required":["input","operation"],"additionalProperties":false},{"type":"object","properties":{"preset":{"type":"string","pattern":"^[a-z0-9-]{1,40}(?:@\\d{4}-\\d{2}-\\d{2})?$","description":"A preset name (`GET /v1/presets`); its options are the defaults and the output's own fields win."},"filename":{"type":"string","minLength":1,"maxLength":105,"description":"The stored file name, `<name>.<format>` by default; one extension, matching `format`."},"format":{"type":"string","enum":["mp4","mov","webm","mkv","ts","mp3","m4a","aac","wav","flac","ogg","opus","jpg","png","gif","json"],"description":"The container or image format; from `filename`, or the type's default."},"strip_metadata":{"type":"boolean","description":"Drop the input's global and stream metadata (GPS, device tags)."},"trim":{"type":"object","properties":{"start":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"end":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"duration":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90}},"additionalProperties":false,"description":"The part of the input to use: `start`, and `end` or `duration`."},"crop":{"type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":7680},"y":{"type":"integer","minimum":0,"maximum":7680},"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680}},"required":["x","y","width","height"],"additionalProperties":false,"description":"A rectangle of the input frame, in input pixels."},"rotate":{"anyOf":[{"type":"number","enum":[90]},{"type":"number","enum":[180]},{"type":"number","enum":[270]}],"description":"Degrees clockwise."},"flip":{"type":"string","enum":["horizontal","vertical"],"description":"Mirror the picture."},"resize":{"type":"object","properties":{"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680},"aspect":{"type":"string","enum":["16:9","9:16","1:1","4:5","4:3","3:4"]},"fit":{"type":"string","enum":["contain","cover","pad"]},"anchor":{"type":"string","enum":["center","top","bottom","left","right"]},"pad_color":{"anyOf":[{"type":"string","enum":["black","white"]},{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}],"description":"`black`, `white` or `#RRGGBB`."},"enlarge":{"type":"boolean","description":"Scale a smaller input up to the size (default true); false keeps it at its size, never larger."}},"additionalProperties":false,"description":"A new size: `width`, `height`, `aspect`, and how the picture fits (`fit`)."},"speed":{"type":"number","minimum":0.25,"maximum":4,"description":"How fast it plays, 0.25 to 4; the sound keeps its pitch."},"fps":{"type":"number","minimum":1,"maximum":120,"description":"A constant frame rate."},"color":{"type":"object","properties":{"brightness":{"type":"number","minimum":-1,"maximum":1},"contrast":{"type":"number","minimum":0,"maximum":3},"saturation":{"type":"number","minimum":0,"maximum":3},"gamma":{"type":"number","minimum":0.1,"maximum":10},"hue":{"type":"number","minimum":-180,"maximum":180}},"additionalProperties":false,"description":"Brightness, contrast, saturation, gamma and hue."},"sharpen":{"type":"object","properties":{"amount":{"type":"number","minimum":0,"maximum":3},"size":{"anyOf":[{"type":"number","enum":[3]},{"type":"number","enum":[5]},{"type":"number","enum":[7]}]}},"additionalProperties":false,"description":"An unsharp mask."},"blur":{"type":"object","properties":{"strength":{"type":"integer","minimum":1,"maximum":50},"regions":{"type":"array","items":{"type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":7680},"y":{"type":"integer","minimum":0,"maximum":7680},"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680}},"required":["x","y","width","height"],"additionalProperties":false},"minItems":1,"maxItems":4}},"required":["strength"],"additionalProperties":false,"description":"A box blur of the whole frame, or of up to 4 regions."},"overlays":{"type":"array","items":{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"position":{"type":"string","enum":["top-left","top","top-right","left","center","right","bottom-left","bottom","bottom-right"]},"margin":{"type":"integer","minimum":0,"maximum":1000},"width":{"type":"integer","minimum":8,"maximum":7680},"opacity":{"type":"number","minimum":0,"maximum":1},"start":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"end":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90}},"required":["input"],"additionalProperties":false},"minItems":1,"maxItems":4,"description":"Images or videos drawn over the picture, in order."},"text":{"type":"array","items":{"$ref":"#/components/schemas/TextLayer"},"minItems":1,"maxItems":8,"description":"Up to 8 text layers, drawn after overlays in order."},"subtitles":{"$ref":"#/components/schemas/Subtitles"},"fade":{"type":"object","properties":{"in":{"type":"number","minimum":0.1,"maximum":60},"out":{"type":"number","minimum":0.1,"maximum":60},"color":{"type":"string","enum":["black","white"]}},"additionalProperties":false,"description":"Fade in at the start and out at the end; `out` needs `trim.duration` or `trim.end`."},"video":{"type":"object","properties":{"codec":{"type":"string","enum":["h264","h265","vp9","av1","copy"]},"quality":{"type":"string","enum":["low","medium","high","lossless"]},"crf":{"type":"integer","minimum":0,"maximum":63},"encoder_preset":{"type":"string","enum":["ultrafast","superfast","veryfast","faster","fast","medium","slow"]},"max_bitrate":{"type":"string","pattern":"^(\\d{1,6})(?:\\.(\\d{1,3}))?([kM])$"},"pixel_format":{"type":"string","enum":["yuv420p","yuv422p","yuv444p","yuv420p10le"]},"faststart":{"type":"boolean"}},"additionalProperties":false,"description":"The video encoder: codec, quality or CRF, preset, maximum bitrate, pixel format."},"audio":{"anyOf":[{"type":"boolean","enum":[false]},{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"codec":{"type":"string","enum":["aac","mp3","opus","vorbis","flac","alac","pcm","copy"]},"quality":{"type":"string","enum":["low","medium","high"]},"bitrate":{"type":"string","pattern":"^(\\d{1,6})(?:\\.(\\d{1,3}))?([kM])$"},"sample_rate":{"type":"integer","minimum":8000,"maximum":192000},"channels":{"anyOf":[{"type":"number","enum":[1]},{"type":"number","enum":[2]}]},"volume":{"type":"number","minimum":0,"maximum":4},"normalize":{"anyOf":[{"type":"boolean","enum":[true]},{"type":"object","properties":{"loudness":{"type":"number","minimum":-70,"maximum":-5},"true_peak":{"type":"number","minimum":-9,"maximum":0},"range":{"type":"number","minimum":1,"maximum":20}},"additionalProperties":false}]},"mix":{"type":"array","items":{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"volume":{"type":"number","minimum":0,"maximum":4}},"required":["input"],"additionalProperties":false},"minItems":1,"maxItems":4}},"additionalProperties":false}],"description":"`false` for no sound, or the audio encoder and filters."},"visualize":{"type":"object","properties":{"style":{"type":"string","enum":["waveform","spectrum"]},"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680},"fps":{"type":"integer","minimum":1,"maximum":60}},"required":["style"],"additionalProperties":false,"description":"A waveform or spectrum video drawn from the input's sound."},"at":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"},{"type":"string","enum":["auto"]}],"description":"The frame time, or `\"auto\"` for the most representative of the first 300 frames."},"times":{"type":"array","items":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"minItems":1,"maxItems":16,"description":"One image per time, `<name>_1`, `<name>_2`, ...; not with `at`."},"quality":{"type":"string","enum":["low","medium","high"],"description":"JPEG quality; PNG ignores it."},"interval":{"type":"number","minimum":0.5,"maximum":3600,"description":"Seconds between frames."},"columns":{"type":"integer","minimum":1,"maximum":16,"description":"Frames across."},"rows":{"type":"integer","minimum":1,"maximum":16,"description":"Frames down."},"tile_width":{"type":"integer","minimum":16,"maximum":640,"description":"Each frame fits in a square of this many pixels."},"exact_times":{"type":"boolean","description":"Decode every frame for exact tile times, instead of key frames only."},"colors":{"type":"integer","minimum":2,"maximum":256,"description":"Colours in the palette."},"threshold":{"type":"number","minimum":1,"maximum":100,"description":"The score, 1 to 100, at which a frame starts a new scene (default 10, scdet's)."},"extra_inputs":{"type":"object","additionalProperties":{"anyOf":[{"type":"string"},{"type":"string","pattern":"^videxo:\\/\\/uploads\\/(up_[a-f0-9]{24})$"},{"type":"object","properties":{"url":{"type":"string"}},"required":["url"],"additionalProperties":false},{"type":"object","properties":{"upload_id":{"type":"string","pattern":"^up_[a-f0-9]{24}$"}},"required":["upload_id"],"additionalProperties":false}],"description":"An http or https URL, `videxo://uploads/<upload_id>`, `{ \"url\" }` or `{ \"upload_id\" }`."}},"webhook_url":{"type":["string","null"],"maxLength":2048,"format":"uri","description":"An https URL that gets the job when it ends (M4)."},"metadata":{"type":"object","additionalProperties":{"type":"string","maxLength":500},"description":"Your own string pairs, returned with the job and its webhook: at most 20 keys of up to 40 characters, values up to 500.","example":{"order":"1234"}},"input":{"anyOf":[{"type":"string"},{"type":"string","pattern":"^videxo:\\/\\/uploads\\/(up_[a-f0-9]{24})$"},{"type":"object","properties":{"url":{"type":"string"}},"required":["url"],"additionalProperties":false},{"type":"object","properties":{"upload_id":{"type":"string","pattern":"^up_[a-f0-9]{24}$"}},"required":["upload_id"],"additionalProperties":false}],"description":"An http or https URL, `videxo://uploads/<upload_id>`, `{ \"url\" }` or `{ \"upload_id\" }`."},"operation":{"type":"string","enum":["thumbnails"],"description":"The per-operation endpoint whose body this is."}},"required":["input","operation"],"additionalProperties":false},{"type":"object","properties":{"preset":{"type":"string","pattern":"^[a-z0-9-]{1,40}(?:@\\d{4}-\\d{2}-\\d{2})?$","description":"A preset name (`GET /v1/presets`); its options are the defaults and the output's own fields win."},"filename":{"type":"string","minLength":1,"maxLength":105,"description":"The stored file name, `<name>.<format>` by default; one extension, matching `format`."},"format":{"type":"string","enum":["mp4","mov","webm","mkv","ts","mp3","m4a","aac","wav","flac","ogg","opus","jpg","png","gif","json"],"description":"The container or image format; from `filename`, or the type's default."},"strip_metadata":{"type":"boolean","description":"Drop the input's global and stream metadata (GPS, device tags)."},"trim":{"type":"object","properties":{"start":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"end":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"duration":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90}},"additionalProperties":false,"description":"The part of the input to use: `start`, and `end` or `duration`."},"crop":{"type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":7680},"y":{"type":"integer","minimum":0,"maximum":7680},"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680}},"required":["x","y","width","height"],"additionalProperties":false,"description":"A rectangle of the input frame, in input pixels."},"rotate":{"anyOf":[{"type":"number","enum":[90]},{"type":"number","enum":[180]},{"type":"number","enum":[270]}],"description":"Degrees clockwise."},"flip":{"type":"string","enum":["horizontal","vertical"],"description":"Mirror the picture."},"resize":{"type":"object","properties":{"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680},"aspect":{"type":"string","enum":["16:9","9:16","1:1","4:5","4:3","3:4"]},"fit":{"type":"string","enum":["contain","cover","pad"]},"anchor":{"type":"string","enum":["center","top","bottom","left","right"]},"pad_color":{"anyOf":[{"type":"string","enum":["black","white"]},{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}],"description":"`black`, `white` or `#RRGGBB`."},"enlarge":{"type":"boolean","description":"Scale a smaller input up to the size (default true); false keeps it at its size, never larger."}},"additionalProperties":false,"description":"A new size: `width`, `height`, `aspect`, and how the picture fits (`fit`)."},"speed":{"type":"number","minimum":0.25,"maximum":4,"description":"How fast it plays, 0.25 to 4; the sound keeps its pitch."},"fps":{"type":"number","minimum":1,"maximum":120,"description":"A constant frame rate."},"color":{"type":"object","properties":{"brightness":{"type":"number","minimum":-1,"maximum":1},"contrast":{"type":"number","minimum":0,"maximum":3},"saturation":{"type":"number","minimum":0,"maximum":3},"gamma":{"type":"number","minimum":0.1,"maximum":10},"hue":{"type":"number","minimum":-180,"maximum":180}},"additionalProperties":false,"description":"Brightness, contrast, saturation, gamma and hue."},"sharpen":{"type":"object","properties":{"amount":{"type":"number","minimum":0,"maximum":3},"size":{"anyOf":[{"type":"number","enum":[3]},{"type":"number","enum":[5]},{"type":"number","enum":[7]}]}},"additionalProperties":false,"description":"An unsharp mask."},"blur":{"type":"object","properties":{"strength":{"type":"integer","minimum":1,"maximum":50},"regions":{"type":"array","items":{"type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":7680},"y":{"type":"integer","minimum":0,"maximum":7680},"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680}},"required":["x","y","width","height"],"additionalProperties":false},"minItems":1,"maxItems":4}},"required":["strength"],"additionalProperties":false,"description":"A box blur of the whole frame, or of up to 4 regions."},"overlays":{"type":"array","items":{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"position":{"type":"string","enum":["top-left","top","top-right","left","center","right","bottom-left","bottom","bottom-right"]},"margin":{"type":"integer","minimum":0,"maximum":1000},"width":{"type":"integer","minimum":8,"maximum":7680},"opacity":{"type":"number","minimum":0,"maximum":1},"start":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"end":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90}},"required":["input"],"additionalProperties":false},"minItems":1,"maxItems":4,"description":"Images or videos drawn over the picture, in order."},"text":{"type":"array","items":{"$ref":"#/components/schemas/TextLayer"},"minItems":1,"maxItems":8,"description":"Up to 8 text layers, drawn after overlays in order."},"subtitles":{"$ref":"#/components/schemas/Subtitles"},"fade":{"type":"object","properties":{"in":{"type":"number","minimum":0.1,"maximum":60},"out":{"type":"number","minimum":0.1,"maximum":60},"color":{"type":"string","enum":["black","white"]}},"additionalProperties":false,"description":"Fade in at the start and out at the end; `out` needs `trim.duration` or `trim.end`."},"video":{"type":"object","properties":{"codec":{"type":"string","enum":["h264","h265","vp9","av1","copy"]},"quality":{"type":"string","enum":["low","medium","high","lossless"]},"crf":{"type":"integer","minimum":0,"maximum":63},"encoder_preset":{"type":"string","enum":["ultrafast","superfast","veryfast","faster","fast","medium","slow"]},"max_bitrate":{"type":"string","pattern":"^(\\d{1,6})(?:\\.(\\d{1,3}))?([kM])$"},"pixel_format":{"type":"string","enum":["yuv420p","yuv422p","yuv444p","yuv420p10le"]},"faststart":{"type":"boolean"}},"additionalProperties":false,"description":"The video encoder: codec, quality or CRF, preset, maximum bitrate, pixel format."},"audio":{"anyOf":[{"type":"boolean","enum":[false]},{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"codec":{"type":"string","enum":["aac","mp3","opus","vorbis","flac","alac","pcm","copy"]},"quality":{"type":"string","enum":["low","medium","high"]},"bitrate":{"type":"string","pattern":"^(\\d{1,6})(?:\\.(\\d{1,3}))?([kM])$"},"sample_rate":{"type":"integer","minimum":8000,"maximum":192000},"channels":{"anyOf":[{"type":"number","enum":[1]},{"type":"number","enum":[2]}]},"volume":{"type":"number","minimum":0,"maximum":4},"normalize":{"anyOf":[{"type":"boolean","enum":[true]},{"type":"object","properties":{"loudness":{"type":"number","minimum":-70,"maximum":-5},"true_peak":{"type":"number","minimum":-9,"maximum":0},"range":{"type":"number","minimum":1,"maximum":20}},"additionalProperties":false}]},"mix":{"type":"array","items":{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"volume":{"type":"number","minimum":0,"maximum":4}},"required":["input"],"additionalProperties":false},"minItems":1,"maxItems":4}},"additionalProperties":false}],"description":"`false` for no sound, or the audio encoder and filters."},"visualize":{"type":"object","properties":{"style":{"type":"string","enum":["waveform","spectrum"]},"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680},"fps":{"type":"integer","minimum":1,"maximum":60}},"required":["style"],"additionalProperties":false,"description":"A waveform or spectrum video drawn from the input's sound."},"at":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"},{"type":"string","enum":["auto"]}],"description":"The frame time, or `\"auto\"` for the most representative of the first 300 frames."},"times":{"type":"array","items":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"minItems":1,"maxItems":16,"description":"One image per time, `<name>_1`, `<name>_2`, ...; not with `at`."},"quality":{"type":"string","enum":["low","medium","high"],"description":"JPEG quality; PNG ignores it."},"interval":{"type":"number","minimum":0.5,"maximum":3600,"description":"Seconds between frames."},"columns":{"type":"integer","minimum":1,"maximum":16,"description":"Frames across."},"rows":{"type":"integer","minimum":1,"maximum":16,"description":"Frames down."},"tile_width":{"type":"integer","minimum":16,"maximum":640,"description":"Each frame fits in a square of this many pixels."},"exact_times":{"type":"boolean","description":"Decode every frame for exact tile times, instead of key frames only."},"colors":{"type":"integer","minimum":2,"maximum":256,"description":"Colours in the palette."},"threshold":{"type":"number","minimum":1,"maximum":100,"description":"The score, 1 to 100, at which a frame starts a new scene (default 10, scdet's)."},"extra_inputs":{"type":"object","additionalProperties":{"anyOf":[{"type":"string"},{"type":"string","pattern":"^videxo:\\/\\/uploads\\/(up_[a-f0-9]{24})$"},{"type":"object","properties":{"url":{"type":"string"}},"required":["url"],"additionalProperties":false},{"type":"object","properties":{"upload_id":{"type":"string","pattern":"^up_[a-f0-9]{24}$"}},"required":["upload_id"],"additionalProperties":false}],"description":"An http or https URL, `videxo://uploads/<upload_id>`, `{ \"url\" }` or `{ \"upload_id\" }`."}},"webhook_url":{"type":["string","null"],"maxLength":2048,"format":"uri","description":"An https URL that gets the job when it ends (M4)."},"metadata":{"type":"object","additionalProperties":{"type":"string","maxLength":500},"description":"Your own string pairs, returned with the job and its webhook: at most 20 keys of up to 40 characters, values up to 500.","example":{"order":"1234"}},"input":{"anyOf":[{"type":"string"},{"type":"string","pattern":"^videxo:\\/\\/uploads\\/(up_[a-f0-9]{24})$"},{"type":"object","properties":{"url":{"type":"string"}},"required":["url"],"additionalProperties":false},{"type":"object","properties":{"upload_id":{"type":"string","pattern":"^up_[a-f0-9]{24}$"}},"required":["upload_id"],"additionalProperties":false}],"description":"An http or https URL, `videxo://uploads/<upload_id>`, `{ \"url\" }` or `{ \"upload_id\" }`."},"operation":{"type":"string","enum":["storyboard"],"description":"The per-operation endpoint whose body this is."}},"required":["input","operation"],"additionalProperties":false},{"type":"object","properties":{"preset":{"type":"string","pattern":"^[a-z0-9-]{1,40}(?:@\\d{4}-\\d{2}-\\d{2})?$","description":"A preset name (`GET /v1/presets`); its options are the defaults and the output's own fields win."},"filename":{"type":"string","minLength":1,"maxLength":105,"description":"The stored file name, `<name>.<format>` by default; one extension, matching `format`."},"format":{"type":"string","enum":["mp4","mov","webm","mkv","ts","mp3","m4a","aac","wav","flac","ogg","opus","jpg","png","gif","json"],"description":"The container or image format; from `filename`, or the type's default."},"strip_metadata":{"type":"boolean","description":"Drop the input's global and stream metadata (GPS, device tags)."},"trim":{"type":"object","properties":{"start":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"end":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"duration":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90}},"additionalProperties":false,"description":"The part of the input to use: `start`, and `end` or `duration`."},"crop":{"type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":7680},"y":{"type":"integer","minimum":0,"maximum":7680},"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680}},"required":["x","y","width","height"],"additionalProperties":false,"description":"A rectangle of the input frame, in input pixels."},"rotate":{"anyOf":[{"type":"number","enum":[90]},{"type":"number","enum":[180]},{"type":"number","enum":[270]}],"description":"Degrees clockwise."},"flip":{"type":"string","enum":["horizontal","vertical"],"description":"Mirror the picture."},"resize":{"type":"object","properties":{"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680},"aspect":{"type":"string","enum":["16:9","9:16","1:1","4:5","4:3","3:4"]},"fit":{"type":"string","enum":["contain","cover","pad"]},"anchor":{"type":"string","enum":["center","top","bottom","left","right"]},"pad_color":{"anyOf":[{"type":"string","enum":["black","white"]},{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}],"description":"`black`, `white` or `#RRGGBB`."},"enlarge":{"type":"boolean","description":"Scale a smaller input up to the size (default true); false keeps it at its size, never larger."}},"additionalProperties":false,"description":"A new size: `width`, `height`, `aspect`, and how the picture fits (`fit`)."},"speed":{"type":"number","minimum":0.25,"maximum":4,"description":"How fast it plays, 0.25 to 4; the sound keeps its pitch."},"fps":{"type":"number","minimum":1,"maximum":120,"description":"A constant frame rate."},"color":{"type":"object","properties":{"brightness":{"type":"number","minimum":-1,"maximum":1},"contrast":{"type":"number","minimum":0,"maximum":3},"saturation":{"type":"number","minimum":0,"maximum":3},"gamma":{"type":"number","minimum":0.1,"maximum":10},"hue":{"type":"number","minimum":-180,"maximum":180}},"additionalProperties":false,"description":"Brightness, contrast, saturation, gamma and hue."},"sharpen":{"type":"object","properties":{"amount":{"type":"number","minimum":0,"maximum":3},"size":{"anyOf":[{"type":"number","enum":[3]},{"type":"number","enum":[5]},{"type":"number","enum":[7]}]}},"additionalProperties":false,"description":"An unsharp mask."},"blur":{"type":"object","properties":{"strength":{"type":"integer","minimum":1,"maximum":50},"regions":{"type":"array","items":{"type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":7680},"y":{"type":"integer","minimum":0,"maximum":7680},"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680}},"required":["x","y","width","height"],"additionalProperties":false},"minItems":1,"maxItems":4}},"required":["strength"],"additionalProperties":false,"description":"A box blur of the whole frame, or of up to 4 regions."},"overlays":{"type":"array","items":{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"position":{"type":"string","enum":["top-left","top","top-right","left","center","right","bottom-left","bottom","bottom-right"]},"margin":{"type":"integer","minimum":0,"maximum":1000},"width":{"type":"integer","minimum":8,"maximum":7680},"opacity":{"type":"number","minimum":0,"maximum":1},"start":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"end":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90}},"required":["input"],"additionalProperties":false},"minItems":1,"maxItems":4,"description":"Images or videos drawn over the picture, in order."},"text":{"type":"array","items":{"$ref":"#/components/schemas/TextLayer"},"minItems":1,"maxItems":8,"description":"Up to 8 text layers, drawn after overlays in order."},"subtitles":{"$ref":"#/components/schemas/Subtitles"},"fade":{"type":"object","properties":{"in":{"type":"number","minimum":0.1,"maximum":60},"out":{"type":"number","minimum":0.1,"maximum":60},"color":{"type":"string","enum":["black","white"]}},"additionalProperties":false,"description":"Fade in at the start and out at the end; `out` needs `trim.duration` or `trim.end`."},"video":{"type":"object","properties":{"codec":{"type":"string","enum":["h264","h265","vp9","av1","copy"]},"quality":{"type":"string","enum":["low","medium","high","lossless"]},"crf":{"type":"integer","minimum":0,"maximum":63},"encoder_preset":{"type":"string","enum":["ultrafast","superfast","veryfast","faster","fast","medium","slow"]},"max_bitrate":{"type":"string","pattern":"^(\\d{1,6})(?:\\.(\\d{1,3}))?([kM])$"},"pixel_format":{"type":"string","enum":["yuv420p","yuv422p","yuv444p","yuv420p10le"]},"faststart":{"type":"boolean"}},"additionalProperties":false,"description":"The video encoder: codec, quality or CRF, preset, maximum bitrate, pixel format."},"audio":{"anyOf":[{"type":"boolean","enum":[false]},{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"codec":{"type":"string","enum":["aac","mp3","opus","vorbis","flac","alac","pcm","copy"]},"quality":{"type":"string","enum":["low","medium","high"]},"bitrate":{"type":"string","pattern":"^(\\d{1,6})(?:\\.(\\d{1,3}))?([kM])$"},"sample_rate":{"type":"integer","minimum":8000,"maximum":192000},"channels":{"anyOf":[{"type":"number","enum":[1]},{"type":"number","enum":[2]}]},"volume":{"type":"number","minimum":0,"maximum":4},"normalize":{"anyOf":[{"type":"boolean","enum":[true]},{"type":"object","properties":{"loudness":{"type":"number","minimum":-70,"maximum":-5},"true_peak":{"type":"number","minimum":-9,"maximum":0},"range":{"type":"number","minimum":1,"maximum":20}},"additionalProperties":false}]},"mix":{"type":"array","items":{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"volume":{"type":"number","minimum":0,"maximum":4}},"required":["input"],"additionalProperties":false},"minItems":1,"maxItems":4}},"additionalProperties":false}],"description":"`false` for no sound, or the audio encoder and filters."},"visualize":{"type":"object","properties":{"style":{"type":"string","enum":["waveform","spectrum"]},"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680},"fps":{"type":"integer","minimum":1,"maximum":60}},"required":["style"],"additionalProperties":false,"description":"A waveform or spectrum video drawn from the input's sound."},"at":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"},{"type":"string","enum":["auto"]}],"description":"The frame time, or `\"auto\"` for the most representative of the first 300 frames."},"times":{"type":"array","items":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"minItems":1,"maxItems":16,"description":"One image per time, `<name>_1`, `<name>_2`, ...; not with `at`."},"quality":{"type":"string","enum":["low","medium","high"],"description":"JPEG quality; PNG ignores it."},"interval":{"type":"number","minimum":0.5,"maximum":3600,"description":"Seconds between frames."},"columns":{"type":"integer","minimum":1,"maximum":16,"description":"Frames across."},"rows":{"type":"integer","minimum":1,"maximum":16,"description":"Frames down."},"tile_width":{"type":"integer","minimum":16,"maximum":640,"description":"Each frame fits in a square of this many pixels."},"exact_times":{"type":"boolean","description":"Decode every frame for exact tile times, instead of key frames only."},"colors":{"type":"integer","minimum":2,"maximum":256,"description":"Colours in the palette."},"threshold":{"type":"number","minimum":1,"maximum":100,"description":"The score, 1 to 100, at which a frame starts a new scene (default 10, scdet's)."},"extra_inputs":{"type":"object","additionalProperties":{"anyOf":[{"type":"string"},{"type":"string","pattern":"^videxo:\\/\\/uploads\\/(up_[a-f0-9]{24})$"},{"type":"object","properties":{"url":{"type":"string"}},"required":["url"],"additionalProperties":false},{"type":"object","properties":{"upload_id":{"type":"string","pattern":"^up_[a-f0-9]{24}$"}},"required":["upload_id"],"additionalProperties":false}],"description":"An http or https URL, `videxo://uploads/<upload_id>`, `{ \"url\" }` or `{ \"upload_id\" }`."}},"webhook_url":{"type":["string","null"],"maxLength":2048,"format":"uri","description":"An https URL that gets the job when it ends (M4)."},"metadata":{"type":"object","additionalProperties":{"type":"string","maxLength":500},"description":"Your own string pairs, returned with the job and its webhook: at most 20 keys of up to 40 characters, values up to 500.","example":{"order":"1234"}},"input":{"anyOf":[{"type":"string"},{"type":"string","pattern":"^videxo:\\/\\/uploads\\/(up_[a-f0-9]{24})$"},{"type":"object","properties":{"url":{"type":"string"}},"required":["url"],"additionalProperties":false},{"type":"object","properties":{"upload_id":{"type":"string","pattern":"^up_[a-f0-9]{24}$"}},"required":["upload_id"],"additionalProperties":false}],"description":"An http or https URL, `videxo://uploads/<upload_id>`, `{ \"url\" }` or `{ \"upload_id\" }`."},"operation":{"type":"string","enum":["gif"],"description":"The per-operation endpoint whose body this is."}},"required":["input","operation"],"additionalProperties":false},{"type":"object","properties":{"preset":{"type":"string","pattern":"^[a-z0-9-]{1,40}(?:@\\d{4}-\\d{2}-\\d{2})?$","description":"A preset name (`GET /v1/presets`); its options are the defaults and the output's own fields win."},"filename":{"type":"string","minLength":1,"maxLength":105,"description":"The stored file name, `<name>.<format>` by default; one extension, matching `format`."},"format":{"type":"string","enum":["mp4","mov","webm","mkv","ts","mp3","m4a","aac","wav","flac","ogg","opus","jpg","png","gif","json"],"description":"The container or image format; from `filename`, or the type's default."},"strip_metadata":{"type":"boolean","description":"Drop the input's global and stream metadata (GPS, device tags)."},"trim":{"type":"object","properties":{"start":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"end":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"duration":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90}},"additionalProperties":false,"description":"The part of the input to use: `start`, and `end` or `duration`."},"crop":{"type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":7680},"y":{"type":"integer","minimum":0,"maximum":7680},"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680}},"required":["x","y","width","height"],"additionalProperties":false,"description":"A rectangle of the input frame, in input pixels."},"rotate":{"anyOf":[{"type":"number","enum":[90]},{"type":"number","enum":[180]},{"type":"number","enum":[270]}],"description":"Degrees clockwise."},"flip":{"type":"string","enum":["horizontal","vertical"],"description":"Mirror the picture."},"resize":{"type":"object","properties":{"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680},"aspect":{"type":"string","enum":["16:9","9:16","1:1","4:5","4:3","3:4"]},"fit":{"type":"string","enum":["contain","cover","pad"]},"anchor":{"type":"string","enum":["center","top","bottom","left","right"]},"pad_color":{"anyOf":[{"type":"string","enum":["black","white"]},{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}],"description":"`black`, `white` or `#RRGGBB`."},"enlarge":{"type":"boolean","description":"Scale a smaller input up to the size (default true); false keeps it at its size, never larger."}},"additionalProperties":false,"description":"A new size: `width`, `height`, `aspect`, and how the picture fits (`fit`)."},"speed":{"type":"number","minimum":0.25,"maximum":4,"description":"How fast it plays, 0.25 to 4; the sound keeps its pitch."},"fps":{"type":"number","minimum":1,"maximum":120,"description":"A constant frame rate."},"color":{"type":"object","properties":{"brightness":{"type":"number","minimum":-1,"maximum":1},"contrast":{"type":"number","minimum":0,"maximum":3},"saturation":{"type":"number","minimum":0,"maximum":3},"gamma":{"type":"number","minimum":0.1,"maximum":10},"hue":{"type":"number","minimum":-180,"maximum":180}},"additionalProperties":false,"description":"Brightness, contrast, saturation, gamma and hue."},"sharpen":{"type":"object","properties":{"amount":{"type":"number","minimum":0,"maximum":3},"size":{"anyOf":[{"type":"number","enum":[3]},{"type":"number","enum":[5]},{"type":"number","enum":[7]}]}},"additionalProperties":false,"description":"An unsharp mask."},"blur":{"type":"object","properties":{"strength":{"type":"integer","minimum":1,"maximum":50},"regions":{"type":"array","items":{"type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":7680},"y":{"type":"integer","minimum":0,"maximum":7680},"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680}},"required":["x","y","width","height"],"additionalProperties":false},"minItems":1,"maxItems":4}},"required":["strength"],"additionalProperties":false,"description":"A box blur of the whole frame, or of up to 4 regions."},"overlays":{"type":"array","items":{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"position":{"type":"string","enum":["top-left","top","top-right","left","center","right","bottom-left","bottom","bottom-right"]},"margin":{"type":"integer","minimum":0,"maximum":1000},"width":{"type":"integer","minimum":8,"maximum":7680},"opacity":{"type":"number","minimum":0,"maximum":1},"start":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"end":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90}},"required":["input"],"additionalProperties":false},"minItems":1,"maxItems":4,"description":"Images or videos drawn over the picture, in order."},"text":{"type":"array","items":{"$ref":"#/components/schemas/TextLayer"},"minItems":1,"maxItems":8,"description":"Up to 8 text layers, drawn after overlays in order."},"subtitles":{"$ref":"#/components/schemas/Subtitles"},"fade":{"type":"object","properties":{"in":{"type":"number","minimum":0.1,"maximum":60},"out":{"type":"number","minimum":0.1,"maximum":60},"color":{"type":"string","enum":["black","white"]}},"additionalProperties":false,"description":"Fade in at the start and out at the end; `out` needs `trim.duration` or `trim.end`."},"video":{"type":"object","properties":{"codec":{"type":"string","enum":["h264","h265","vp9","av1","copy"]},"quality":{"type":"string","enum":["low","medium","high","lossless"]},"crf":{"type":"integer","minimum":0,"maximum":63},"encoder_preset":{"type":"string","enum":["ultrafast","superfast","veryfast","faster","fast","medium","slow"]},"max_bitrate":{"type":"string","pattern":"^(\\d{1,6})(?:\\.(\\d{1,3}))?([kM])$"},"pixel_format":{"type":"string","enum":["yuv420p","yuv422p","yuv444p","yuv420p10le"]},"faststart":{"type":"boolean"}},"additionalProperties":false,"description":"The video encoder: codec, quality or CRF, preset, maximum bitrate, pixel format."},"audio":{"anyOf":[{"type":"boolean","enum":[false]},{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"codec":{"type":"string","enum":["aac","mp3","opus","vorbis","flac","alac","pcm","copy"]},"quality":{"type":"string","enum":["low","medium","high"]},"bitrate":{"type":"string","pattern":"^(\\d{1,6})(?:\\.(\\d{1,3}))?([kM])$"},"sample_rate":{"type":"integer","minimum":8000,"maximum":192000},"channels":{"anyOf":[{"type":"number","enum":[1]},{"type":"number","enum":[2]}]},"volume":{"type":"number","minimum":0,"maximum":4},"normalize":{"anyOf":[{"type":"boolean","enum":[true]},{"type":"object","properties":{"loudness":{"type":"number","minimum":-70,"maximum":-5},"true_peak":{"type":"number","minimum":-9,"maximum":0},"range":{"type":"number","minimum":1,"maximum":20}},"additionalProperties":false}]},"mix":{"type":"array","items":{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"volume":{"type":"number","minimum":0,"maximum":4}},"required":["input"],"additionalProperties":false},"minItems":1,"maxItems":4}},"additionalProperties":false}],"description":"`false` for no sound, or the audio encoder and filters."},"visualize":{"type":"object","properties":{"style":{"type":"string","enum":["waveform","spectrum"]},"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680},"fps":{"type":"integer","minimum":1,"maximum":60}},"required":["style"],"additionalProperties":false,"description":"A waveform or spectrum video drawn from the input's sound."},"at":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"},{"type":"string","enum":["auto"]}],"description":"The frame time, or `\"auto\"` for the most representative of the first 300 frames."},"times":{"type":"array","items":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"minItems":1,"maxItems":16,"description":"One image per time, `<name>_1`, `<name>_2`, ...; not with `at`."},"quality":{"type":"string","enum":["low","medium","high"],"description":"JPEG quality; PNG ignores it."},"interval":{"type":"number","minimum":0.5,"maximum":3600,"description":"Seconds between frames."},"columns":{"type":"integer","minimum":1,"maximum":16,"description":"Frames across."},"rows":{"type":"integer","minimum":1,"maximum":16,"description":"Frames down."},"tile_width":{"type":"integer","minimum":16,"maximum":640,"description":"Each frame fits in a square of this many pixels."},"exact_times":{"type":"boolean","description":"Decode every frame for exact tile times, instead of key frames only."},"colors":{"type":"integer","minimum":2,"maximum":256,"description":"Colours in the palette."},"threshold":{"type":"number","minimum":1,"maximum":100,"description":"The score, 1 to 100, at which a frame starts a new scene (default 10, scdet's)."},"extra_inputs":{"type":"object","additionalProperties":{"anyOf":[{"type":"string"},{"type":"string","pattern":"^videxo:\\/\\/uploads\\/(up_[a-f0-9]{24})$"},{"type":"object","properties":{"url":{"type":"string"}},"required":["url"],"additionalProperties":false},{"type":"object","properties":{"upload_id":{"type":"string","pattern":"^up_[a-f0-9]{24}$"}},"required":["upload_id"],"additionalProperties":false}],"description":"An http or https URL, `videxo://uploads/<upload_id>`, `{ \"url\" }` or `{ \"upload_id\" }`."}},"webhook_url":{"type":["string","null"],"maxLength":2048,"format":"uri","description":"An https URL that gets the job when it ends (M4)."},"metadata":{"type":"object","additionalProperties":{"type":"string","maxLength":500},"description":"Your own string pairs, returned with the job and its webhook: at most 20 keys of up to 40 characters, values up to 500.","example":{"order":"1234"}},"input":{"anyOf":[{"type":"string"},{"type":"string","pattern":"^videxo:\\/\\/uploads\\/(up_[a-f0-9]{24})$"},{"type":"object","properties":{"url":{"type":"string"}},"required":["url"],"additionalProperties":false},{"type":"object","properties":{"upload_id":{"type":"string","pattern":"^up_[a-f0-9]{24}$"}},"required":["upload_id"],"additionalProperties":false}],"description":"An http or https URL, `videxo://uploads/<upload_id>`, `{ \"url\" }` or `{ \"upload_id\" }`."},"operation":{"type":"string","enum":["audio"],"description":"The per-operation endpoint whose body this is."}},"required":["input","operation"],"additionalProperties":false},{"type":"object","properties":{"preset":{"type":"string","pattern":"^[a-z0-9-]{1,40}(?:@\\d{4}-\\d{2}-\\d{2})?$","description":"A preset name (`GET /v1/presets`); its options are the defaults and the output's own fields win."},"filename":{"type":"string","minLength":1,"maxLength":105,"description":"The stored file name, `<name>.<format>` by default; one extension, matching `format`."},"format":{"type":"string","enum":["mp4","mov","webm","mkv","ts","mp3","m4a","aac","wav","flac","ogg","opus","jpg","png","gif","json"],"description":"The container or image format; from `filename`, or the type's default."},"strip_metadata":{"type":"boolean","description":"Drop the input's global and stream metadata (GPS, device tags)."},"trim":{"type":"object","properties":{"start":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"end":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"duration":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90}},"additionalProperties":false,"description":"The part of the input to use: `start`, and `end` or `duration`."},"crop":{"type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":7680},"y":{"type":"integer","minimum":0,"maximum":7680},"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680}},"required":["x","y","width","height"],"additionalProperties":false,"description":"A rectangle of the input frame, in input pixels."},"rotate":{"anyOf":[{"type":"number","enum":[90]},{"type":"number","enum":[180]},{"type":"number","enum":[270]}],"description":"Degrees clockwise."},"flip":{"type":"string","enum":["horizontal","vertical"],"description":"Mirror the picture."},"resize":{"type":"object","properties":{"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680},"aspect":{"type":"string","enum":["16:9","9:16","1:1","4:5","4:3","3:4"]},"fit":{"type":"string","enum":["contain","cover","pad"]},"anchor":{"type":"string","enum":["center","top","bottom","left","right"]},"pad_color":{"anyOf":[{"type":"string","enum":["black","white"]},{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}],"description":"`black`, `white` or `#RRGGBB`."},"enlarge":{"type":"boolean","description":"Scale a smaller input up to the size (default true); false keeps it at its size, never larger."}},"additionalProperties":false,"description":"A new size: `width`, `height`, `aspect`, and how the picture fits (`fit`)."},"speed":{"type":"number","minimum":0.25,"maximum":4,"description":"How fast it plays, 0.25 to 4; the sound keeps its pitch."},"fps":{"type":"number","minimum":1,"maximum":120,"description":"A constant frame rate."},"color":{"type":"object","properties":{"brightness":{"type":"number","minimum":-1,"maximum":1},"contrast":{"type":"number","minimum":0,"maximum":3},"saturation":{"type":"number","minimum":0,"maximum":3},"gamma":{"type":"number","minimum":0.1,"maximum":10},"hue":{"type":"number","minimum":-180,"maximum":180}},"additionalProperties":false,"description":"Brightness, contrast, saturation, gamma and hue."},"sharpen":{"type":"object","properties":{"amount":{"type":"number","minimum":0,"maximum":3},"size":{"anyOf":[{"type":"number","enum":[3]},{"type":"number","enum":[5]},{"type":"number","enum":[7]}]}},"additionalProperties":false,"description":"An unsharp mask."},"blur":{"type":"object","properties":{"strength":{"type":"integer","minimum":1,"maximum":50},"regions":{"type":"array","items":{"type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":7680},"y":{"type":"integer","minimum":0,"maximum":7680},"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680}},"required":["x","y","width","height"],"additionalProperties":false},"minItems":1,"maxItems":4}},"required":["strength"],"additionalProperties":false,"description":"A box blur of the whole frame, or of up to 4 regions."},"overlays":{"type":"array","items":{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"position":{"type":"string","enum":["top-left","top","top-right","left","center","right","bottom-left","bottom","bottom-right"]},"margin":{"type":"integer","minimum":0,"maximum":1000},"width":{"type":"integer","minimum":8,"maximum":7680},"opacity":{"type":"number","minimum":0,"maximum":1},"start":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"end":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90}},"required":["input"],"additionalProperties":false},"minItems":1,"maxItems":4,"description":"Images or videos drawn over the picture, in order."},"text":{"type":"array","items":{"$ref":"#/components/schemas/TextLayer"},"minItems":1,"maxItems":8,"description":"Up to 8 text layers, drawn after overlays in order."},"subtitles":{"$ref":"#/components/schemas/Subtitles"},"fade":{"type":"object","properties":{"in":{"type":"number","minimum":0.1,"maximum":60},"out":{"type":"number","minimum":0.1,"maximum":60},"color":{"type":"string","enum":["black","white"]}},"additionalProperties":false,"description":"Fade in at the start and out at the end; `out` needs `trim.duration` or `trim.end`."},"video":{"type":"object","properties":{"codec":{"type":"string","enum":["h264","h265","vp9","av1","copy"]},"quality":{"type":"string","enum":["low","medium","high","lossless"]},"crf":{"type":"integer","minimum":0,"maximum":63},"encoder_preset":{"type":"string","enum":["ultrafast","superfast","veryfast","faster","fast","medium","slow"]},"max_bitrate":{"type":"string","pattern":"^(\\d{1,6})(?:\\.(\\d{1,3}))?([kM])$"},"pixel_format":{"type":"string","enum":["yuv420p","yuv422p","yuv444p","yuv420p10le"]},"faststart":{"type":"boolean"}},"additionalProperties":false,"description":"The video encoder: codec, quality or CRF, preset, maximum bitrate, pixel format."},"audio":{"anyOf":[{"type":"boolean","enum":[false]},{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"codec":{"type":"string","enum":["aac","mp3","opus","vorbis","flac","alac","pcm","copy"]},"quality":{"type":"string","enum":["low","medium","high"]},"bitrate":{"type":"string","pattern":"^(\\d{1,6})(?:\\.(\\d{1,3}))?([kM])$"},"sample_rate":{"type":"integer","minimum":8000,"maximum":192000},"channels":{"anyOf":[{"type":"number","enum":[1]},{"type":"number","enum":[2]}]},"volume":{"type":"number","minimum":0,"maximum":4},"normalize":{"anyOf":[{"type":"boolean","enum":[true]},{"type":"object","properties":{"loudness":{"type":"number","minimum":-70,"maximum":-5},"true_peak":{"type":"number","minimum":-9,"maximum":0},"range":{"type":"number","minimum":1,"maximum":20}},"additionalProperties":false}]},"mix":{"type":"array","items":{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"volume":{"type":"number","minimum":0,"maximum":4}},"required":["input"],"additionalProperties":false},"minItems":1,"maxItems":4}},"additionalProperties":false}],"description":"`false` for no sound, or the audio encoder and filters."},"visualize":{"type":"object","properties":{"style":{"type":"string","enum":["waveform","spectrum"]},"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680},"fps":{"type":"integer","minimum":1,"maximum":60}},"required":["style"],"additionalProperties":false,"description":"A waveform or spectrum video drawn from the input's sound."},"at":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"},{"type":"string","enum":["auto"]}],"description":"The frame time, or `\"auto\"` for the most representative of the first 300 frames."},"times":{"type":"array","items":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"minItems":1,"maxItems":16,"description":"One image per time, `<name>_1`, `<name>_2`, ...; not with `at`."},"quality":{"type":"string","enum":["low","medium","high"],"description":"JPEG quality; PNG ignores it."},"interval":{"type":"number","minimum":0.5,"maximum":3600,"description":"Seconds between frames."},"columns":{"type":"integer","minimum":1,"maximum":16,"description":"Frames across."},"rows":{"type":"integer","minimum":1,"maximum":16,"description":"Frames down."},"tile_width":{"type":"integer","minimum":16,"maximum":640,"description":"Each frame fits in a square of this many pixels."},"exact_times":{"type":"boolean","description":"Decode every frame for exact tile times, instead of key frames only."},"colors":{"type":"integer","minimum":2,"maximum":256,"description":"Colours in the palette."},"threshold":{"type":"number","minimum":1,"maximum":100,"description":"The score, 1 to 100, at which a frame starts a new scene (default 10, scdet's)."},"extra_inputs":{"type":"object","additionalProperties":{"anyOf":[{"type":"string"},{"type":"string","pattern":"^videxo:\\/\\/uploads\\/(up_[a-f0-9]{24})$"},{"type":"object","properties":{"url":{"type":"string"}},"required":["url"],"additionalProperties":false},{"type":"object","properties":{"upload_id":{"type":"string","pattern":"^up_[a-f0-9]{24}$"}},"required":["upload_id"],"additionalProperties":false}],"description":"An http or https URL, `videxo://uploads/<upload_id>`, `{ \"url\" }` or `{ \"upload_id\" }`."}},"webhook_url":{"type":["string","null"],"maxLength":2048,"format":"uri","description":"An https URL that gets the job when it ends (M4)."},"metadata":{"type":"object","additionalProperties":{"type":"string","maxLength":500},"description":"Your own string pairs, returned with the job and its webhook: at most 20 keys of up to 40 characters, values up to 500.","example":{"order":"1234"}},"inputs":{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","pattern":"^videxo:\\/\\/uploads\\/(up_[a-f0-9]{24})$"},{"type":"object","properties":{"url":{"type":"string"}},"required":["url"],"additionalProperties":false},{"type":"object","properties":{"upload_id":{"type":"string","pattern":"^up_[a-f0-9]{24}$"}},"required":["upload_id"],"additionalProperties":false},{"type":"object","properties":{"source":{"anyOf":[{"type":"string"},{"type":"string","pattern":"^videxo:\\/\\/uploads\\/(up_[a-f0-9]{24})$"},{"type":"object","properties":{"url":{"type":"string"}},"required":["url"],"additionalProperties":false},{"type":"object","properties":{"upload_id":{"type":"string","pattern":"^up_[a-f0-9]{24}$"}},"required":["upload_id"],"additionalProperties":false}],"description":"An http or https URL, `videxo://uploads/<upload_id>`, `{ \"url\" }` or `{ \"upload_id\" }`."},"start":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"end":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"text":{"type":"array","items":{"$ref":"#/components/schemas/TextLayer"},"minItems":1,"maxItems":4,"description":"Up to 4 text layers, drawn after overlays in order."},"transition":{"$ref":"#/components/schemas/Transition"}},"required":["source"],"additionalProperties":false}]},"minItems":2,"maxItems":16},"type":{"type":"string","enum":["video","audio"]},"operation":{"type":"string","enum":["concat"],"description":"The per-operation endpoint whose body this is."}},"required":["inputs","operation"],"additionalProperties":false},{"type":"object","properties":{"preset":{"type":"string","pattern":"^[a-z0-9-]{1,40}(?:@\\d{4}-\\d{2}-\\d{2})?$","description":"A preset name (`GET /v1/presets`); its options are the defaults and the output's own fields win."},"filename":{"type":"string","minLength":1,"maxLength":105,"description":"The stored file name, `<name>.<format>` by default; one extension, matching `format`."},"format":{"type":"string","enum":["mp4","mov","webm","mkv","ts","mp3","m4a","aac","wav","flac","ogg","opus","jpg","png","gif","json"],"description":"The container or image format; from `filename`, or the type's default."},"strip_metadata":{"type":"boolean","description":"Drop the input's global and stream metadata (GPS, device tags)."},"trim":{"type":"object","properties":{"start":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"end":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"duration":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90}},"additionalProperties":false,"description":"The part of the input to use: `start`, and `end` or `duration`."},"crop":{"type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":7680},"y":{"type":"integer","minimum":0,"maximum":7680},"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680}},"required":["x","y","width","height"],"additionalProperties":false,"description":"A rectangle of the input frame, in input pixels."},"rotate":{"anyOf":[{"type":"number","enum":[90]},{"type":"number","enum":[180]},{"type":"number","enum":[270]}],"description":"Degrees clockwise."},"flip":{"type":"string","enum":["horizontal","vertical"],"description":"Mirror the picture."},"resize":{"type":"object","properties":{"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680},"aspect":{"type":"string","enum":["16:9","9:16","1:1","4:5","4:3","3:4"]},"fit":{"type":"string","enum":["contain","cover","pad"]},"anchor":{"type":"string","enum":["center","top","bottom","left","right"]},"pad_color":{"anyOf":[{"type":"string","enum":["black","white"]},{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}],"description":"`black`, `white` or `#RRGGBB`."},"enlarge":{"type":"boolean","description":"Scale a smaller input up to the size (default true); false keeps it at its size, never larger."}},"additionalProperties":false,"description":"A new size: `width`, `height`, `aspect`, and how the picture fits (`fit`)."},"speed":{"type":"number","minimum":0.25,"maximum":4,"description":"How fast it plays, 0.25 to 4; the sound keeps its pitch."},"fps":{"type":"number","minimum":1,"maximum":120,"description":"A constant frame rate."},"color":{"type":"object","properties":{"brightness":{"type":"number","minimum":-1,"maximum":1},"contrast":{"type":"number","minimum":0,"maximum":3},"saturation":{"type":"number","minimum":0,"maximum":3},"gamma":{"type":"number","minimum":0.1,"maximum":10},"hue":{"type":"number","minimum":-180,"maximum":180}},"additionalProperties":false,"description":"Brightness, contrast, saturation, gamma and hue."},"sharpen":{"type":"object","properties":{"amount":{"type":"number","minimum":0,"maximum":3},"size":{"anyOf":[{"type":"number","enum":[3]},{"type":"number","enum":[5]},{"type":"number","enum":[7]}]}},"additionalProperties":false,"description":"An unsharp mask."},"blur":{"type":"object","properties":{"strength":{"type":"integer","minimum":1,"maximum":50},"regions":{"type":"array","items":{"type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":7680},"y":{"type":"integer","minimum":0,"maximum":7680},"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680}},"required":["x","y","width","height"],"additionalProperties":false},"minItems":1,"maxItems":4}},"required":["strength"],"additionalProperties":false,"description":"A box blur of the whole frame, or of up to 4 regions."},"overlays":{"type":"array","items":{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"position":{"type":"string","enum":["top-left","top","top-right","left","center","right","bottom-left","bottom","bottom-right"]},"margin":{"type":"integer","minimum":0,"maximum":1000},"width":{"type":"integer","minimum":8,"maximum":7680},"opacity":{"type":"number","minimum":0,"maximum":1},"start":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"end":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90}},"required":["input"],"additionalProperties":false},"minItems":1,"maxItems":4,"description":"Images or videos drawn over the picture, in order."},"text":{"type":"array","items":{"$ref":"#/components/schemas/TextLayer"},"minItems":1,"maxItems":8,"description":"Up to 8 text layers, drawn after overlays in order."},"subtitles":{"$ref":"#/components/schemas/Subtitles"},"fade":{"type":"object","properties":{"in":{"type":"number","minimum":0.1,"maximum":60},"out":{"type":"number","minimum":0.1,"maximum":60},"color":{"type":"string","enum":["black","white"]}},"additionalProperties":false,"description":"Fade in at the start and out at the end; `out` needs `trim.duration` or `trim.end`."},"video":{"type":"object","properties":{"codec":{"type":"string","enum":["h264","h265","vp9","av1","copy"]},"quality":{"type":"string","enum":["low","medium","high","lossless"]},"crf":{"type":"integer","minimum":0,"maximum":63},"encoder_preset":{"type":"string","enum":["ultrafast","superfast","veryfast","faster","fast","medium","slow"]},"max_bitrate":{"type":"string","pattern":"^(\\d{1,6})(?:\\.(\\d{1,3}))?([kM])$"},"pixel_format":{"type":"string","enum":["yuv420p","yuv422p","yuv444p","yuv420p10le"]},"faststart":{"type":"boolean"}},"additionalProperties":false,"description":"The video encoder: codec, quality or CRF, preset, maximum bitrate, pixel format."},"audio":{"anyOf":[{"type":"boolean","enum":[false]},{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"codec":{"type":"string","enum":["aac","mp3","opus","vorbis","flac","alac","pcm","copy"]},"quality":{"type":"string","enum":["low","medium","high"]},"bitrate":{"type":"string","pattern":"^(\\d{1,6})(?:\\.(\\d{1,3}))?([kM])$"},"sample_rate":{"type":"integer","minimum":8000,"maximum":192000},"channels":{"anyOf":[{"type":"number","enum":[1]},{"type":"number","enum":[2]}]},"volume":{"type":"number","minimum":0,"maximum":4},"normalize":{"anyOf":[{"type":"boolean","enum":[true]},{"type":"object","properties":{"loudness":{"type":"number","minimum":-70,"maximum":-5},"true_peak":{"type":"number","minimum":-9,"maximum":0},"range":{"type":"number","minimum":1,"maximum":20}},"additionalProperties":false}]},"mix":{"type":"array","items":{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"volume":{"type":"number","minimum":0,"maximum":4}},"required":["input"],"additionalProperties":false},"minItems":1,"maxItems":4}},"additionalProperties":false}],"description":"`false` for no sound, or the audio encoder and filters."},"visualize":{"type":"object","properties":{"style":{"type":"string","enum":["waveform","spectrum"]},"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680},"fps":{"type":"integer","minimum":1,"maximum":60}},"required":["style"],"additionalProperties":false,"description":"A waveform or spectrum video drawn from the input's sound."},"at":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"},{"type":"string","enum":["auto"]}],"description":"The frame time, or `\"auto\"` for the most representative of the first 300 frames."},"times":{"type":"array","items":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"minItems":1,"maxItems":16,"description":"One image per time, `<name>_1`, `<name>_2`, ...; not with `at`."},"quality":{"type":"string","enum":["low","medium","high"],"description":"JPEG quality; PNG ignores it."},"interval":{"type":"number","minimum":0.5,"maximum":3600,"description":"Seconds between frames."},"columns":{"type":"integer","minimum":1,"maximum":16,"description":"Frames across."},"rows":{"type":"integer","minimum":1,"maximum":16,"description":"Frames down."},"tile_width":{"type":"integer","minimum":16,"maximum":640,"description":"Each frame fits in a square of this many pixels."},"exact_times":{"type":"boolean","description":"Decode every frame for exact tile times, instead of key frames only."},"colors":{"type":"integer","minimum":2,"maximum":256,"description":"Colours in the palette."},"threshold":{"type":"number","minimum":1,"maximum":100,"description":"The score, 1 to 100, at which a frame starts a new scene (default 10, scdet's)."},"extra_inputs":{"type":"object","additionalProperties":{"anyOf":[{"type":"string"},{"type":"string","pattern":"^videxo:\\/\\/uploads\\/(up_[a-f0-9]{24})$"},{"type":"object","properties":{"url":{"type":"string"}},"required":["url"],"additionalProperties":false},{"type":"object","properties":{"upload_id":{"type":"string","pattern":"^up_[a-f0-9]{24}$"}},"required":["upload_id"],"additionalProperties":false}],"description":"An http or https URL, `videxo://uploads/<upload_id>`, `{ \"url\" }` or `{ \"upload_id\" }`."}},"webhook_url":{"type":["string","null"],"maxLength":2048,"format":"uri","description":"An https URL that gets the job when it ends (M4)."},"metadata":{"type":"object","additionalProperties":{"type":"string","maxLength":500},"description":"Your own string pairs, returned with the job and its webhook: at most 20 keys of up to 40 characters, values up to 500.","example":{"order":"1234"}},"images":{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"string","pattern":"^videxo:\\/\\/uploads\\/(up_[a-f0-9]{24})$"},{"type":"object","properties":{"url":{"type":"string"}},"required":["url"],"additionalProperties":false},{"type":"object","properties":{"upload_id":{"type":"string","pattern":"^up_[a-f0-9]{24}$"}},"required":["upload_id"],"additionalProperties":false},{"type":"object","properties":{"source":{"anyOf":[{"type":"string"},{"type":"string","pattern":"^videxo:\\/\\/uploads\\/(up_[a-f0-9]{24})$"},{"type":"object","properties":{"url":{"type":"string"}},"required":["url"],"additionalProperties":false},{"type":"object","properties":{"upload_id":{"type":"string","pattern":"^up_[a-f0-9]{24}$"}},"required":["upload_id"],"additionalProperties":false}],"description":"An http or https URL, `videxo://uploads/<upload_id>`, `{ \"url\" }` or `{ \"upload_id\" }`."},"duration":{"type":"number","minimum":0.1,"maximum":300},"motion":{"type":"string","enum":["zoom-in","zoom-out","pan-left","pan-right","pan-up","pan-down"],"description":"A slow zoom or pan across the picture, which then always fills the frame (Ken Burns)."},"text":{"type":"array","items":{"$ref":"#/components/schemas/TextLayer"},"minItems":1,"maxItems":4,"description":"Up to 4 text layers, drawn after overlays in order."},"transition":{"$ref":"#/components/schemas/Transition"}},"required":["source"],"additionalProperties":false}]},"minItems":1,"maxItems":16,"description":"The pictures in order: sources, or `{ \"source\", \"duration\", \"motion\", \"text\", \"transition\" }`."},"duration":{"type":"number","minimum":0.1,"maximum":300,"description":"Seconds each image stays on screen unless it says otherwise (default 3)."},"motion":{"type":"string","enum":["zoom-in","zoom-out","pan-left","pan-right","pan-up","pan-down"],"description":"A slow zoom or pan across the picture, which then always fills the frame (Ken Burns)."},"transition":{"type":"object","properties":{"type":{"type":"string","enum":["fade","fade-black","fade-white","dissolve","wipe-left","wipe-right","wipe-up","wipe-down","slide-left","slide-right","slide-up","slide-down","circle-open","circle-close","radial","zoom-in","pixelize"]},"duration":{"type":"number","minimum":0.1,"maximum":5,"description":"Seconds the two parts overlap, 0.1 to 5 (default 1)."}},"required":["type"],"additionalProperties":false,"description":"The transition into each image but the first, unless it sets its own."},"operation":{"type":"string","enum":["slideshow"],"description":"The per-operation endpoint whose body this is."}},"required":["images","operation"],"additionalProperties":false},{"type":"object","properties":{"input":{"anyOf":[{"type":"string"},{"type":"string","pattern":"^videxo:\\/\\/uploads\\/(up_[a-f0-9]{24})$"},{"type":"object","properties":{"url":{"type":"string"}},"required":["url"],"additionalProperties":false},{"type":"object","properties":{"upload_id":{"type":"string","pattern":"^up_[a-f0-9]{24}$"}},"required":["upload_id"],"additionalProperties":false}],"description":"An http or https URL, `videxo://uploads/<upload_id>`, `{ \"url\" }` or `{ \"upload_id\" }`."},"filename":{"type":"string","minLength":1,"maxLength":105,"description":"The stored file name, `<name>.<format>` by default; one extension, matching `format`."},"webhook_url":{"type":["string","null"],"maxLength":2048,"format":"uri","description":"An https URL that gets the job when it ends (M4)."},"metadata":{"type":"object","additionalProperties":{"type":"string","maxLength":500},"description":"Your own string pairs, returned with the job and its webhook: at most 20 keys of up to 40 characters, values up to 500.","example":{"order":"1234"}},"operation":{"type":"string","enum":["probe"],"description":"The per-operation endpoint whose body this is."}},"required":["input","operation"],"additionalProperties":false},{"type":"object","properties":{"preset":{"type":"string","pattern":"^[a-z0-9-]{1,40}(?:@\\d{4}-\\d{2}-\\d{2})?$","description":"A preset name (`GET /v1/presets`); its options are the defaults and the output's own fields win."},"filename":{"type":"string","minLength":1,"maxLength":105,"description":"The stored file name, `<name>.<format>` by default; one extension, matching `format`."},"format":{"type":"string","enum":["mp4","mov","webm","mkv","ts","mp3","m4a","aac","wav","flac","ogg","opus","jpg","png","gif","json"],"description":"The container or image format; from `filename`, or the type's default."},"strip_metadata":{"type":"boolean","description":"Drop the input's global and stream metadata (GPS, device tags)."},"trim":{"type":"object","properties":{"start":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"end":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"duration":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90}},"additionalProperties":false,"description":"The part of the input to use: `start`, and `end` or `duration`."},"crop":{"type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":7680},"y":{"type":"integer","minimum":0,"maximum":7680},"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680}},"required":["x","y","width","height"],"additionalProperties":false,"description":"A rectangle of the input frame, in input pixels."},"rotate":{"anyOf":[{"type":"number","enum":[90]},{"type":"number","enum":[180]},{"type":"number","enum":[270]}],"description":"Degrees clockwise."},"flip":{"type":"string","enum":["horizontal","vertical"],"description":"Mirror the picture."},"resize":{"type":"object","properties":{"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680},"aspect":{"type":"string","enum":["16:9","9:16","1:1","4:5","4:3","3:4"]},"fit":{"type":"string","enum":["contain","cover","pad"]},"anchor":{"type":"string","enum":["center","top","bottom","left","right"]},"pad_color":{"anyOf":[{"type":"string","enum":["black","white"]},{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}],"description":"`black`, `white` or `#RRGGBB`."},"enlarge":{"type":"boolean","description":"Scale a smaller input up to the size (default true); false keeps it at its size, never larger."}},"additionalProperties":false,"description":"A new size: `width`, `height`, `aspect`, and how the picture fits (`fit`)."},"speed":{"type":"number","minimum":0.25,"maximum":4,"description":"How fast it plays, 0.25 to 4; the sound keeps its pitch."},"fps":{"type":"number","minimum":1,"maximum":120,"description":"A constant frame rate."},"color":{"type":"object","properties":{"brightness":{"type":"number","minimum":-1,"maximum":1},"contrast":{"type":"number","minimum":0,"maximum":3},"saturation":{"type":"number","minimum":0,"maximum":3},"gamma":{"type":"number","minimum":0.1,"maximum":10},"hue":{"type":"number","minimum":-180,"maximum":180}},"additionalProperties":false,"description":"Brightness, contrast, saturation, gamma and hue."},"sharpen":{"type":"object","properties":{"amount":{"type":"number","minimum":0,"maximum":3},"size":{"anyOf":[{"type":"number","enum":[3]},{"type":"number","enum":[5]},{"type":"number","enum":[7]}]}},"additionalProperties":false,"description":"An unsharp mask."},"blur":{"type":"object","properties":{"strength":{"type":"integer","minimum":1,"maximum":50},"regions":{"type":"array","items":{"type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":7680},"y":{"type":"integer","minimum":0,"maximum":7680},"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680}},"required":["x","y","width","height"],"additionalProperties":false},"minItems":1,"maxItems":4}},"required":["strength"],"additionalProperties":false,"description":"A box blur of the whole frame, or of up to 4 regions."},"overlays":{"type":"array","items":{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"position":{"type":"string","enum":["top-left","top","top-right","left","center","right","bottom-left","bottom","bottom-right"]},"margin":{"type":"integer","minimum":0,"maximum":1000},"width":{"type":"integer","minimum":8,"maximum":7680},"opacity":{"type":"number","minimum":0,"maximum":1},"start":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"end":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90}},"required":["input"],"additionalProperties":false},"minItems":1,"maxItems":4,"description":"Images or videos drawn over the picture, in order."},"text":{"type":"array","items":{"$ref":"#/components/schemas/TextLayer"},"minItems":1,"maxItems":8,"description":"Up to 8 text layers, drawn after overlays in order."},"subtitles":{"$ref":"#/components/schemas/Subtitles"},"fade":{"type":"object","properties":{"in":{"type":"number","minimum":0.1,"maximum":60},"out":{"type":"number","minimum":0.1,"maximum":60},"color":{"type":"string","enum":["black","white"]}},"additionalProperties":false,"description":"Fade in at the start and out at the end; `out` needs `trim.duration` or `trim.end`."},"video":{"type":"object","properties":{"codec":{"type":"string","enum":["h264","h265","vp9","av1","copy"]},"quality":{"type":"string","enum":["low","medium","high","lossless"]},"crf":{"type":"integer","minimum":0,"maximum":63},"encoder_preset":{"type":"string","enum":["ultrafast","superfast","veryfast","faster","fast","medium","slow"]},"max_bitrate":{"type":"string","pattern":"^(\\d{1,6})(?:\\.(\\d{1,3}))?([kM])$"},"pixel_format":{"type":"string","enum":["yuv420p","yuv422p","yuv444p","yuv420p10le"]},"faststart":{"type":"boolean"}},"additionalProperties":false,"description":"The video encoder: codec, quality or CRF, preset, maximum bitrate, pixel format."},"audio":{"anyOf":[{"type":"boolean","enum":[false]},{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"codec":{"type":"string","enum":["aac","mp3","opus","vorbis","flac","alac","pcm","copy"]},"quality":{"type":"string","enum":["low","medium","high"]},"bitrate":{"type":"string","pattern":"^(\\d{1,6})(?:\\.(\\d{1,3}))?([kM])$"},"sample_rate":{"type":"integer","minimum":8000,"maximum":192000},"channels":{"anyOf":[{"type":"number","enum":[1]},{"type":"number","enum":[2]}]},"volume":{"type":"number","minimum":0,"maximum":4},"normalize":{"anyOf":[{"type":"boolean","enum":[true]},{"type":"object","properties":{"loudness":{"type":"number","minimum":-70,"maximum":-5},"true_peak":{"type":"number","minimum":-9,"maximum":0},"range":{"type":"number","minimum":1,"maximum":20}},"additionalProperties":false}]},"mix":{"type":"array","items":{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"volume":{"type":"number","minimum":0,"maximum":4}},"required":["input"],"additionalProperties":false},"minItems":1,"maxItems":4}},"additionalProperties":false}],"description":"`false` for no sound, or the audio encoder and filters."},"visualize":{"type":"object","properties":{"style":{"type":"string","enum":["waveform","spectrum"]},"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680},"fps":{"type":"integer","minimum":1,"maximum":60}},"required":["style"],"additionalProperties":false,"description":"A waveform or spectrum video drawn from the input's sound."},"at":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"},{"type":"string","enum":["auto"]}],"description":"The frame time, or `\"auto\"` for the most representative of the first 300 frames."},"times":{"type":"array","items":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"minItems":1,"maxItems":16,"description":"One image per time, `<name>_1`, `<name>_2`, ...; not with `at`."},"quality":{"type":"string","enum":["low","medium","high"],"description":"JPEG quality; PNG ignores it."},"interval":{"type":"number","minimum":0.5,"maximum":3600,"description":"Seconds between frames."},"columns":{"type":"integer","minimum":1,"maximum":16,"description":"Frames across."},"rows":{"type":"integer","minimum":1,"maximum":16,"description":"Frames down."},"tile_width":{"type":"integer","minimum":16,"maximum":640,"description":"Each frame fits in a square of this many pixels."},"exact_times":{"type":"boolean","description":"Decode every frame for exact tile times, instead of key frames only."},"colors":{"type":"integer","minimum":2,"maximum":256,"description":"Colours in the palette."},"threshold":{"type":"number","minimum":1,"maximum":100,"description":"The score, 1 to 100, at which a frame starts a new scene (default 10, scdet's)."},"extra_inputs":{"type":"object","additionalProperties":{"anyOf":[{"type":"string"},{"type":"string","pattern":"^videxo:\\/\\/uploads\\/(up_[a-f0-9]{24})$"},{"type":"object","properties":{"url":{"type":"string"}},"required":["url"],"additionalProperties":false},{"type":"object","properties":{"upload_id":{"type":"string","pattern":"^up_[a-f0-9]{24}$"}},"required":["upload_id"],"additionalProperties":false}],"description":"An http or https URL, `videxo://uploads/<upload_id>`, `{ \"url\" }` or `{ \"upload_id\" }`."}},"webhook_url":{"type":["string","null"],"maxLength":2048,"format":"uri","description":"An https URL that gets the job when it ends (M4)."},"metadata":{"type":"object","additionalProperties":{"type":"string","maxLength":500},"description":"Your own string pairs, returned with the job and its webhook: at most 20 keys of up to 40 characters, values up to 500.","example":{"order":"1234"}},"input":{"anyOf":[{"type":"string"},{"type":"string","pattern":"^videxo:\\/\\/uploads\\/(up_[a-f0-9]{24})$"},{"type":"object","properties":{"url":{"type":"string"}},"required":["url"],"additionalProperties":false},{"type":"object","properties":{"upload_id":{"type":"string","pattern":"^up_[a-f0-9]{24}$"}},"required":["upload_id"],"additionalProperties":false}],"description":"An http or https URL, `videxo://uploads/<upload_id>`, `{ \"url\" }` or `{ \"upload_id\" }`."},"operation":{"type":"string","enum":["scenes"],"description":"The per-operation endpoint whose body this is."}},"required":["input","operation"],"additionalProperties":false}],"description":"An operations body, or the body of a per-operation endpoint with `operation` set to its name (`transcode`, ...)."},"OperationsJobRequest":{"type":"object","properties":{"inputs":{"type":"object","additionalProperties":{"anyOf":[{"type":"string"},{"type":"string","pattern":"^videxo:\\/\\/uploads\\/(up_[a-f0-9]{24})$"},{"type":"object","properties":{"url":{"type":"string"}},"required":["url"],"additionalProperties":false},{"type":"object","properties":{"upload_id":{"type":"string","pattern":"^up_[a-f0-9]{24}$"}},"required":["upload_id"],"additionalProperties":false}],"description":"An http or https URL, `videxo://uploads/<upload_id>`, `{ \"url\" }` or `{ \"upload_id\" }`."},"description":"Input names to sources. A name becomes the alias `in_<name>`."},"outputs":{"type":"array","items":{"$ref":"#/components/schemas/Output"},"minItems":1,"maxItems":16},"webhook_url":{"type":["string","null"],"maxLength":2048,"format":"uri","description":"An https URL that gets the job when it ends (M4)."},"metadata":{"type":"object","additionalProperties":{"type":"string","maxLength":500},"description":"Your own string pairs, returned with the job and its webhook: at most 20 keys of up to 40 characters, values up to 500.","example":{"order":"1234"}}},"required":["inputs","outputs"],"additionalProperties":false,"description":"The operations body: named `inputs` and a list of `outputs`, each an output type with options or a preset."},"Job":{"type":"object","properties":{"id":{"type":"string","pattern":"^job_[a-z0-9]{24}$","description":"`job_` and 24 lowercase letters and digits.","example":"job_3k9x0c2mfq8w1n7r5t4b6v2z"},"state":{"$ref":"#/components/schemas/JobState"},"kind":{"type":"string","enum":["command","operations"],"description":"How the job was described: a command body or an operations body."},"operation":{"type":["string","null"],"enum":["transcode","thumbnails","storyboard","gif","audio","concat","slideshow","probe","scenes",null],"description":"The per-operation endpoint that made the job (`transcode`, `thumbnails`, ...); null otherwise."},"spec":{"type":["object","null"],"properties":{"inputs":{"type":"object","additionalProperties":{"anyOf":[{"type":"object","properties":{"url":{"type":"string"}},"required":["url"]},{"type":"object","properties":{"upload_id":{"type":"string"}},"required":["upload_id"]}]}},"outputs":{"type":"array","items":{"$ref":"#/components/schemas/Output"}}},"required":["inputs","outputs"],"description":"The operations body as accepted, presets expanded and defaults filled; null for a command job."},"command":{"type":["string","null"],"description":"The ffmpeg arguments the job runs; for an operations job, the compiled command without its metadata outputs. Null when every output is metadata (no ffmpeg runs)."},"input_files":{"type":["object","null"],"additionalProperties":{"type":"string"},"description":"The inputs of `command`; an input only metadata outputs read is not listed. Null without a command."},"output_files":{"type":["object","null"],"additionalProperties":{"type":"string"},"description":"The outputs of `command`; metadata outputs are not listed. Null without a command."},"ffmpeg_command":{"type":["string","null"],"description":"One shell line that runs the command with a local ffmpeg: aliases replaced by the input URLs (an upload by its file name) and the output file names. Null without a command."},"steps":{"type":"array","items":{"$ref":"#/components/schemas/JobStep"},"description":"What the job runs, in order; a command job has one step, `ffmpeg`."},"webhook_url":{"type":["string","null"]},"metadata":{"type":"object","additionalProperties":{"type":"string"}},"progress":{"type":["number","null"],"minimum":0,"maximum":1,"description":"From 0 to 1 while running; null when unknown."},"error":{"type":["object","null"],"properties":{"code":{"type":"string","enum":["limit_exceeded","usage_cap_reached","out_of_credits","service_unavailable","internal_error","input_unreachable","processing_failed"],"description":"The stable error code (the Errors page lists each one)."},"reason":{"type":["string","null"],"enum":["missing_api_key","invalid_api_key","api_key_revoked","api_key_expired","missing_client_token","invalid_client_token","client_token_expired","client_token_superseded","client_token_revoked","missing_credentials","invalid_token","token_expired","token_revoked","account_disabled","link_invalid","origin_not_allowed","role_insufficient","token_scope","client_token_required","insufficient_scope","invalid_fields","not_json","range_not_satisfiable","size_mismatch","job","file","output","upload","webhook_endpoint","webhook_delivery","route","subscription","ticket","client_token","job_active","upload_used","webhook_endpoint_exists","webhook_delivery_pending","idempotency_key_reused","checkout_pending","subscription_exists","same_plan","ticket_closed","link_expired","file_expired","upload_expired","request_body_size","upload_size","input_size","output_size","job_duration","low_balance","member_limit","organization_limit","token_uploads","subtitles_size","temporary","cancel_unconfirmed","queue_timeout","url_refused","http_status","network","redirects","too_slow","ffmpeg_error","output_empty","time_past_end","subtitles_invalid","media_unreadable",null],"description":"The documented finer case of the code, or null."},"message":{"type":"string","description":"What happened, for people; it may change."},"retryable":{"type":"boolean","description":"Whether creating the same job again can succeed without a change."},"log_tail":{"type":["string","null"],"description":"With `processing_failed` `ffmpeg_error`: ffmpeg's last lines about the media, once available; null otherwise."}},"required":["code","reason","message","retryable","log_tail"],"description":"Why the job failed; null unless the state is failed."},"outputs":{"type":"array","items":{"$ref":"#/components/schemas/JobOutput"},"description":"The stored files, once the job succeeded."},"usage":{"type":["object","null"],"properties":{"seconds":{"type":"integer","minimum":0},"input_bytes":{"type":"integer","minimum":0},"output_bytes":{"type":"integer","minimum":0},"credits":{"type":"number","minimum":0,"description":"Credits, with one decimal: the sum of the bill rounded up once, and never more than the job held, which can make it less than that sum."},"bill":{"type":["object","null"],"properties":{"lines":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["copy","audio","gif","video","image","metadata","scenes"]},"seconds":{"type":"integer","minimum":0,"description":"Seconds billed, rounded up per output; a kind billed by duration."},"images":{"type":"integer","minimum":0},"per_minute":{"type":"number","minimum":0,"description":"The kind's or video tier's credits per minute, before multipliers."},"multiplier":{"type":"number","exclusiveMinimum":0,"description":"The codec and frame rate multipliers, multiplied together."},"credits":{"type":"number","minimum":0,"description":"The exact credits of this part, to three decimals, before the job is rounded."}},"required":["kind","credits"]},"description":"One per stored output, and one per video stream of an output with several. None when no output was stored."},"data":{"type":"object","properties":{"input_bytes":{"type":"integer","minimum":0},"output_bytes":{"type":"integer","minimum":0},"credits":{"type":"number","minimum":0,"description":"The exact credits of this part, to three decimals, before the job is rounded."}},"required":["input_bytes","output_bytes","credits"]},"processing":{"type":"object","properties":{"seconds":{"type":"integer","minimum":0},"included_seconds":{"type":"integer","minimum":0,"description":"Processing the lines include: 3 seconds per billed second and per image."},"credits":{"type":"number","minimum":0,"description":"The processing beyond what is included, at 10 credits per minute."}},"required":["seconds","included_seconds","credits"]}},"default":null,"required":["lines","data","processing"],"description":"What the credits are made of; null for an AI job, a job that used nothing and a job from before this field."}},"required":["seconds","input_bytes","output_bytes","credits"],"description":"What the job used, once it ended."},"created_at":{"type":"string","format":"date-time"},"started_at":{"type":["string","null"],"format":"date-time"},"finished_at":{"type":["string","null"],"format":"date-time"}},"required":["id","state","kind","operation","spec","command","input_files","output_files","ffmpeg_command","steps","webhook_url","metadata","progress","error","outputs","usage","created_at","started_at","finished_at"]},"JobOutput":{"type":"object","properties":{"alias":{"type":"string"},"name":{"type":"string","description":"The output name from the request (`thumb` for every file of an image output with `times`); for a command job, the alias without `out_`."},"filename":{"type":"string"},"size_bytes":{"type":"integer","minimum":0},"sha256":{"type":"string"},"content_type":{"type":"string"},"expires_at":{"type":"string","format":"date-time"},"download_url":{"type":["string","null"],"format":"uri","description":"Signed download URL; null after deletion or retention."},"download_url_expires_at":{"type":["string","null"],"format":"date-time"},"deleted_at":{"type":["string","null"],"format":"date-time","description":"When the file was deleted; null while it can be downloaded."}},"required":["alias","name","filename","size_bytes","sha256","content_type","expires_at","download_url","download_url_expires_at","deleted_at"]},"JobRequest":{"anyOf":[{"$ref":"#/components/schemas/CreateJobRequest"},{"$ref":"#/components/schemas/OperationsJobRequest"}],"description":"A command body (`command`, `input_files`, `output_files`) or an operations body (`inputs`, `outputs`); both may carry `webhook_url` and `metadata`."},"CreateJobRequest":{"type":"object","properties":{"input_files":{"type":"object","additionalProperties":{"anyOf":[{"type":"string","maxLength":4096,"format":"uri"},{"type":"string","pattern":"^videxo:\\/\\/uploads\\/(up_[a-f0-9]{24})$"}]},"description":"Input aliases (`in_` and a name) to http/https URLs or videxo://uploads/<upload_id>.","example":{"in_video":"https://example.com/a.mp4"}},"output_files":{"type":"object","additionalProperties":{"type":"string","maxLength":105},"description":"Output aliases (`out_` and a name) to file names.","example":{"out_main":"clip.mp4"}},"command":{"type":"string","minLength":1,"maxLength":65536,"description":"ffmpeg arguments without `ffmpeg`, naming files only by `{{alias}}`.","example":"-i {{in_video}} -vf scale=1280:-2 -c:v libx264 -crf 23 {{out_main}}"},"webhook_url":{"type":["string","null"],"maxLength":2048,"format":"uri","description":"An https URL that gets the job when it ends (M4)."},"metadata":{"type":"object","additionalProperties":{"type":"string","maxLength":500},"description":"Your own string pairs, returned with the job and its webhook: at most 20 keys of up to 40 characters, values up to 500.","example":{"order":"1234"}}},"required":["input_files","output_files","command"],"additionalProperties":false,"description":"The command body: an ffmpeg `command` with its `input_files` and `output_files` (docs: command rules)."},"TranscodeRequest":{"type":"object","properties":{"input":{"anyOf":[{"type":"string"},{"type":"string","pattern":"^videxo:\\/\\/uploads\\/(up_[a-f0-9]{24})$"},{"type":"object","properties":{"url":{"type":"string"}},"required":["url"],"additionalProperties":false},{"type":"object","properties":{"upload_id":{"type":"string","pattern":"^up_[a-f0-9]{24}$"}},"required":["upload_id"],"additionalProperties":false}],"description":"An http or https URL, `videxo://uploads/<upload_id>`, `{ \"url\" }` or `{ \"upload_id\" }`."},"extra_inputs":{"type":"object","propertyNames":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"additionalProperties":{"anyOf":[{"type":"string"},{"type":"string","pattern":"^videxo:\\/\\/uploads\\/(up_[a-f0-9]{24})$"},{"type":"object","properties":{"url":{"type":"string"}},"required":["url"],"additionalProperties":false},{"type":"object","properties":{"upload_id":{"type":"string","pattern":"^up_[a-f0-9]{24}$"}},"required":["upload_id"],"additionalProperties":false}],"description":"An http or https URL, `videxo://uploads/<upload_id>`, `{ \"url\" }` or `{ \"upload_id\" }`."}},"webhook_url":{"description":"An https URL that gets the job when it ends (M4).","anyOf":[{"type":"string","maxLength":2048,"format":"uri"},{"type":"null"}]},"metadata":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":40},"additionalProperties":{"type":"string","maxLength":500},"description":"Your own string pairs, returned with the job and its webhook: at most 20 keys of up to 40 characters, values up to 500.","example":{"order":"1234"}},"filename":{"description":"The stored file name, `<name>.<format>` by default; one extension, matching `format`.","type":"string","minLength":1,"maxLength":105},"format":{"description":"The container or image format; from `filename`, or the type's default.","type":"string","enum":["mp4","mov","webm","mkv","ts","mp3","m4a","aac","wav","flac","ogg","opus","jpg","png","gif","json"]},"trim":{"description":"The part of the input to use: `start`, and `end` or `duration`.","type":"object","properties":{"start":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"end":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"duration":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90}},"additionalProperties":false},"crop":{"description":"A rectangle of the input frame, in input pixels.","type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":7680},"y":{"type":"integer","minimum":0,"maximum":7680},"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680}},"required":["x","y","width","height"],"additionalProperties":false},"rotate":{"description":"Degrees clockwise.","anyOf":[{"type":"number","const":90},{"type":"number","const":180},{"type":"number","const":270}]},"flip":{"description":"Mirror the picture.","type":"string","enum":["horizontal","vertical"]},"resize":{"description":"A new size: `width`, `height`, `aspect`, and how the picture fits (`fit`).","type":"object","properties":{"width":{"type":"integer","minimum":16,"maximum":7680,"multipleOf":2},"height":{"type":"integer","minimum":16,"maximum":7680,"multipleOf":2},"aspect":{"type":"string","enum":["16:9","9:16","1:1","4:5","4:3","3:4"]},"fit":{"type":"string","enum":["contain","cover","pad"]},"anchor":{"type":"string","enum":["center","top","bottom","left","right"]},"pad_color":{"anyOf":[{"type":"string","enum":["black","white"]},{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}],"description":"`black`, `white` or `#RRGGBB`."},"enlarge":{"description":"Scale a smaller input up to the size (default true); false keeps it at its size, never larger.","type":"boolean"}},"additionalProperties":false},"color":{"description":"Brightness, contrast, saturation, gamma and hue.","type":"object","properties":{"brightness":{"type":"number","minimum":-1,"maximum":1},"contrast":{"type":"number","minimum":0,"maximum":3},"saturation":{"type":"number","minimum":0,"maximum":3},"gamma":{"type":"number","minimum":0.1,"maximum":10},"hue":{"type":"number","minimum":-180,"maximum":180}},"additionalProperties":false},"sharpen":{"description":"An unsharp mask.","type":"object","properties":{"amount":{"type":"number","minimum":0,"maximum":3},"size":{"anyOf":[{"type":"number","const":3},{"type":"number","const":5},{"type":"number","const":7}]}},"additionalProperties":false},"blur":{"description":"A box blur of the whole frame, or of up to 4 regions.","type":"object","properties":{"strength":{"type":"integer","minimum":1,"maximum":50},"regions":{"minItems":1,"maxItems":4,"type":"array","items":{"type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":7680},"y":{"type":"integer","minimum":0,"maximum":7680},"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680}},"required":["x","y","width","height"],"additionalProperties":false}}},"required":["strength"],"additionalProperties":false},"overlays":{"description":"Images or videos drawn over the picture, in order.","minItems":1,"maxItems":4,"type":"array","items":{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"position":{"type":"string","enum":["top-left","top","top-right","left","center","right","bottom-left","bottom","bottom-right"]},"margin":{"type":"integer","minimum":0,"maximum":1000},"width":{"type":"integer","minimum":8,"maximum":7680},"opacity":{"type":"number","minimum":0,"maximum":1},"start":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"end":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90}},"required":["input"],"additionalProperties":false}},"text":{"minItems":1,"maxItems":8,"type":"array","items":{"$ref":"#/components/schemas/TextLayer"},"description":"Up to 8 text layers, drawn after overlays in order."},"subtitles":{"$ref":"#/components/schemas/Subtitles"},"speed":{"description":"How fast it plays, 0.25 to 4; the sound keeps its pitch.","type":"number","minimum":0.25,"maximum":4},"fps":{"description":"A constant frame rate.","type":"number","minimum":1,"maximum":120},"fade":{"description":"Fade in at the start and out at the end; `out` needs `trim.duration` or `trim.end`.","type":"object","properties":{"in":{"type":"number","minimum":0.1,"maximum":60},"out":{"type":"number","minimum":0.1,"maximum":60},"color":{"type":"string","enum":["black","white"]}},"additionalProperties":false},"video":{"description":"The video encoder: codec, quality or CRF, preset, maximum bitrate, pixel format.","type":"object","properties":{"codec":{"type":"string","enum":["h264","h265","vp9","av1","copy"]},"quality":{"type":"string","enum":["low","medium","high","lossless"]},"crf":{"type":"integer","minimum":0,"maximum":63},"encoder_preset":{"type":"string","enum":["ultrafast","superfast","veryfast","faster","fast","medium","slow"]},"max_bitrate":{"type":"string","pattern":"^(\\d{1,6})(?:\\.(\\d{1,3}))?([kM])$"},"pixel_format":{"type":"string","enum":["yuv420p","yuv422p","yuv444p","yuv420p10le"]},"faststart":{"type":"boolean"}},"additionalProperties":false},"audio":{"description":"`false` for no sound, or the audio encoder and filters.","anyOf":[{"type":"boolean","const":false},{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"codec":{"type":"string","enum":["aac","mp3","opus","vorbis","flac","alac","pcm","copy"]},"quality":{"type":"string","enum":["low","medium","high"]},"bitrate":{"type":"string","pattern":"^(\\d{1,6})(?:\\.(\\d{1,3}))?([kM])$"},"sample_rate":{"type":"integer","minimum":8000,"maximum":192000},"channels":{"anyOf":[{"type":"number","const":1},{"type":"number","const":2}]},"volume":{"type":"number","minimum":0,"maximum":4},"normalize":{"anyOf":[{"type":"boolean","const":true},{"type":"object","properties":{"loudness":{"type":"number","minimum":-70,"maximum":-5},"true_peak":{"type":"number","minimum":-9,"maximum":0},"range":{"type":"number","minimum":1,"maximum":20}},"additionalProperties":false}]},"mix":{"minItems":1,"maxItems":4,"type":"array","items":{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"volume":{"type":"number","minimum":0,"maximum":4}},"required":["input"],"additionalProperties":false}}},"additionalProperties":false}]},"visualize":{"description":"A waveform or spectrum video drawn from the input's sound.","type":"object","properties":{"style":{"type":"string","enum":["waveform","spectrum"]},"width":{"type":"integer","minimum":16,"maximum":7680,"multipleOf":2},"height":{"type":"integer","minimum":16,"maximum":7680,"multipleOf":2},"fps":{"type":"integer","minimum":1,"maximum":60}},"required":["style"],"additionalProperties":false},"strip_metadata":{"description":"Drop the input's global and stream metadata (GPS, device tags).","type":"boolean"},"preset":{"description":"A video preset (`GET /v1/presets`); its options are the defaults and the output's own fields win.","type":"string","enum":["web-720p","web-1080p","social-vertical","square"]}},"required":["input"],"additionalProperties":false},"ThumbnailsRequest":{"type":"object","properties":{"input":{"anyOf":[{"type":"string"},{"type":"string","pattern":"^videxo:\\/\\/uploads\\/(up_[a-f0-9]{24})$"},{"type":"object","properties":{"url":{"type":"string"}},"required":["url"],"additionalProperties":false},{"type":"object","properties":{"upload_id":{"type":"string","pattern":"^up_[a-f0-9]{24}$"}},"required":["upload_id"],"additionalProperties":false}],"description":"An http or https URL, `videxo://uploads/<upload_id>`, `{ \"url\" }` or `{ \"upload_id\" }`."},"extra_inputs":{"type":"object","propertyNames":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"additionalProperties":{"anyOf":[{"type":"string"},{"type":"string","pattern":"^videxo:\\/\\/uploads\\/(up_[a-f0-9]{24})$"},{"type":"object","properties":{"url":{"type":"string"}},"required":["url"],"additionalProperties":false},{"type":"object","properties":{"upload_id":{"type":"string","pattern":"^up_[a-f0-9]{24}$"}},"required":["upload_id"],"additionalProperties":false}],"description":"An http or https URL, `videxo://uploads/<upload_id>`, `{ \"url\" }` or `{ \"upload_id\" }`."}},"webhook_url":{"description":"An https URL that gets the job when it ends (M4).","anyOf":[{"type":"string","maxLength":2048,"format":"uri"},{"type":"null"}]},"metadata":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":40},"additionalProperties":{"type":"string","maxLength":500},"description":"Your own string pairs, returned with the job and its webhook: at most 20 keys of up to 40 characters, values up to 500.","example":{"order":"1234"}},"filename":{"description":"The stored file name, `<name>.<format>` by default; one extension, matching `format`.","type":"string","minLength":1,"maxLength":105},"format":{"description":"The container or image format; from `filename`, or the type's default.","type":"string","enum":["mp4","mov","webm","mkv","ts","mp3","m4a","aac","wav","flac","ogg","opus","jpg","png","gif","json"]},"crop":{"description":"A rectangle of the input frame, in input pixels.","type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":7680},"y":{"type":"integer","minimum":0,"maximum":7680},"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680}},"required":["x","y","width","height"],"additionalProperties":false},"rotate":{"description":"Degrees clockwise.","anyOf":[{"type":"number","const":90},{"type":"number","const":180},{"type":"number","const":270}]},"flip":{"description":"Mirror the picture.","type":"string","enum":["horizontal","vertical"]},"resize":{"description":"A new size: `width`, `height`, `aspect`, and how the picture fits (`fit`).","type":"object","properties":{"width":{"type":"integer","minimum":16,"maximum":7680,"multipleOf":2},"height":{"type":"integer","minimum":16,"maximum":7680,"multipleOf":2},"aspect":{"type":"string","enum":["16:9","9:16","1:1","4:5","4:3","3:4"]},"fit":{"type":"string","enum":["contain","cover","pad"]},"anchor":{"type":"string","enum":["center","top","bottom","left","right"]},"pad_color":{"anyOf":[{"type":"string","enum":["black","white"]},{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}],"description":"`black`, `white` or `#RRGGBB`."},"enlarge":{"description":"Scale a smaller input up to the size (default true); false keeps it at its size, never larger.","type":"boolean"}},"additionalProperties":false},"color":{"description":"Brightness, contrast, saturation, gamma and hue.","type":"object","properties":{"brightness":{"type":"number","minimum":-1,"maximum":1},"contrast":{"type":"number","minimum":0,"maximum":3},"saturation":{"type":"number","minimum":0,"maximum":3},"gamma":{"type":"number","minimum":0.1,"maximum":10},"hue":{"type":"number","minimum":-180,"maximum":180}},"additionalProperties":false},"sharpen":{"description":"An unsharp mask.","type":"object","properties":{"amount":{"type":"number","minimum":0,"maximum":3},"size":{"anyOf":[{"type":"number","const":3},{"type":"number","const":5},{"type":"number","const":7}]}},"additionalProperties":false},"blur":{"description":"A box blur of the whole frame, or of up to 4 regions.","type":"object","properties":{"strength":{"type":"integer","minimum":1,"maximum":50},"regions":{"minItems":1,"maxItems":4,"type":"array","items":{"type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":7680},"y":{"type":"integer","minimum":0,"maximum":7680},"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680}},"required":["x","y","width","height"],"additionalProperties":false}}},"required":["strength"],"additionalProperties":false},"overlays":{"description":"Images or videos drawn over the picture, in order.","minItems":1,"maxItems":4,"type":"array","items":{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"position":{"type":"string","enum":["top-left","top","top-right","left","center","right","bottom-left","bottom","bottom-right"]},"margin":{"type":"integer","minimum":0,"maximum":1000},"width":{"type":"integer","minimum":8,"maximum":7680},"opacity":{"type":"number","minimum":0,"maximum":1},"start":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"end":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90}},"required":["input"],"additionalProperties":false}},"text":{"minItems":1,"maxItems":8,"type":"array","items":{"$ref":"#/components/schemas/TextLayer"},"description":"Up to 8 text layers, drawn after overlays in order."},"at":{"description":"The frame time, or `\"auto\"` for the most representative of the first 300 frames.","anyOf":[{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},{"type":"string","const":"auto"}]},"times":{"description":"One image per time, `<name>_1`, `<name>_2`, ...; not with `at`.","minItems":1,"maxItems":16,"type":"array","items":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90}},"quality":{"description":"JPEG quality; PNG ignores it.","type":"string","enum":["low","medium","high"]},"strip_metadata":{"description":"Drop the input's global and stream metadata (GPS, device tags).","type":"boolean"},"preset":{"description":"An image preset (`GET /v1/presets`); its options are the defaults and the output's own fields win.","type":"string","enum":["poster"]}},"required":["input"],"additionalProperties":false},"StoryboardRequest":{"type":"object","properties":{"input":{"anyOf":[{"type":"string"},{"type":"string","pattern":"^videxo:\\/\\/uploads\\/(up_[a-f0-9]{24})$"},{"type":"object","properties":{"url":{"type":"string"}},"required":["url"],"additionalProperties":false},{"type":"object","properties":{"upload_id":{"type":"string","pattern":"^up_[a-f0-9]{24}$"}},"required":["upload_id"],"additionalProperties":false}],"description":"An http or https URL, `videxo://uploads/<upload_id>`, `{ \"url\" }` or `{ \"upload_id\" }`."},"extra_inputs":{"type":"object","propertyNames":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"additionalProperties":{"anyOf":[{"type":"string"},{"type":"string","pattern":"^videxo:\\/\\/uploads\\/(up_[a-f0-9]{24})$"},{"type":"object","properties":{"url":{"type":"string"}},"required":["url"],"additionalProperties":false},{"type":"object","properties":{"upload_id":{"type":"string","pattern":"^up_[a-f0-9]{24}$"}},"required":["upload_id"],"additionalProperties":false}],"description":"An http or https URL, `videxo://uploads/<upload_id>`, `{ \"url\" }` or `{ \"upload_id\" }`."}},"webhook_url":{"description":"An https URL that gets the job when it ends (M4).","anyOf":[{"type":"string","maxLength":2048,"format":"uri"},{"type":"null"}]},"metadata":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":40},"additionalProperties":{"type":"string","maxLength":500},"description":"Your own string pairs, returned with the job and its webhook: at most 20 keys of up to 40 characters, values up to 500.","example":{"order":"1234"}},"filename":{"description":"The stored file name, `<name>.<format>` by default; one extension, matching `format`.","type":"string","minLength":1,"maxLength":105},"format":{"description":"The container or image format; from `filename`, or the type's default.","type":"string","enum":["mp4","mov","webm","mkv","ts","mp3","m4a","aac","wav","flac","ogg","opus","jpg","png","gif","json"]},"trim":{"description":"The part of the input to use: `start`, and `end` or `duration`.","type":"object","properties":{"start":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"end":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"duration":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90}},"additionalProperties":false},"crop":{"description":"A rectangle of the input frame, in input pixels.","type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":7680},"y":{"type":"integer","minimum":0,"maximum":7680},"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680}},"required":["x","y","width","height"],"additionalProperties":false},"rotate":{"description":"Degrees clockwise.","anyOf":[{"type":"number","const":90},{"type":"number","const":180},{"type":"number","const":270}]},"flip":{"description":"Mirror the picture.","type":"string","enum":["horizontal","vertical"]},"color":{"description":"Brightness, contrast, saturation, gamma and hue.","type":"object","properties":{"brightness":{"type":"number","minimum":-1,"maximum":1},"contrast":{"type":"number","minimum":0,"maximum":3},"saturation":{"type":"number","minimum":0,"maximum":3},"gamma":{"type":"number","minimum":0.1,"maximum":10},"hue":{"type":"number","minimum":-180,"maximum":180}},"additionalProperties":false},"interval":{"description":"Seconds between frames.","type":"number","minimum":0.5,"maximum":3600},"columns":{"description":"Frames across.","type":"integer","minimum":1,"maximum":16},"rows":{"description":"Frames down.","type":"integer","minimum":1,"maximum":16},"tile_width":{"description":"Each frame fits in a square of this many pixels.","type":"integer","minimum":16,"maximum":640},"quality":{"description":"JPEG quality; PNG ignores it.","type":"string","enum":["low","medium","high"]},"exact_times":{"description":"Decode every frame for exact tile times, instead of key frames only.","type":"boolean"},"strip_metadata":{"description":"Drop the input's global and stream metadata (GPS, device tags).","type":"boolean"}},"required":["input"],"additionalProperties":false},"GifRequest":{"type":"object","properties":{"input":{"anyOf":[{"type":"string"},{"type":"string","pattern":"^videxo:\\/\\/uploads\\/(up_[a-f0-9]{24})$"},{"type":"object","properties":{"url":{"type":"string"}},"required":["url"],"additionalProperties":false},{"type":"object","properties":{"upload_id":{"type":"string","pattern":"^up_[a-f0-9]{24}$"}},"required":["upload_id"],"additionalProperties":false}],"description":"An http or https URL, `videxo://uploads/<upload_id>`, `{ \"url\" }` or `{ \"upload_id\" }`."},"extra_inputs":{"type":"object","propertyNames":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"additionalProperties":{"anyOf":[{"type":"string"},{"type":"string","pattern":"^videxo:\\/\\/uploads\\/(up_[a-f0-9]{24})$"},{"type":"object","properties":{"url":{"type":"string"}},"required":["url"],"additionalProperties":false},{"type":"object","properties":{"upload_id":{"type":"string","pattern":"^up_[a-f0-9]{24}$"}},"required":["upload_id"],"additionalProperties":false}],"description":"An http or https URL, `videxo://uploads/<upload_id>`, `{ \"url\" }` or `{ \"upload_id\" }`."}},"webhook_url":{"description":"An https URL that gets the job when it ends (M4).","anyOf":[{"type":"string","maxLength":2048,"format":"uri"},{"type":"null"}]},"metadata":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":40},"additionalProperties":{"type":"string","maxLength":500},"description":"Your own string pairs, returned with the job and its webhook: at most 20 keys of up to 40 characters, values up to 500.","example":{"order":"1234"}},"filename":{"description":"The stored file name, `<name>.<format>` by default; one extension, matching `format`.","type":"string","minLength":1,"maxLength":105},"format":{"description":"The container or image format; from `filename`, or the type's default.","type":"string","enum":["mp4","mov","webm","mkv","ts","mp3","m4a","aac","wav","flac","ogg","opus","jpg","png","gif","json"]},"trim":{"description":"The part of the input to use: `start`, and `end` or `duration`.","type":"object","properties":{"start":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"end":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"duration":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90}},"additionalProperties":false},"crop":{"description":"A rectangle of the input frame, in input pixels.","type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":7680},"y":{"type":"integer","minimum":0,"maximum":7680},"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680}},"required":["x","y","width","height"],"additionalProperties":false},"rotate":{"description":"Degrees clockwise.","anyOf":[{"type":"number","const":90},{"type":"number","const":180},{"type":"number","const":270}]},"flip":{"description":"Mirror the picture.","type":"string","enum":["horizontal","vertical"]},"resize":{"description":"A new size: `width`, `height`, `aspect`, and how the picture fits (`fit`).","type":"object","properties":{"width":{"type":"integer","minimum":16,"maximum":7680,"multipleOf":2},"height":{"type":"integer","minimum":16,"maximum":7680,"multipleOf":2},"aspect":{"type":"string","enum":["16:9","9:16","1:1","4:5","4:3","3:4"]},"fit":{"type":"string","enum":["contain","cover","pad"]},"anchor":{"type":"string","enum":["center","top","bottom","left","right"]},"pad_color":{"anyOf":[{"type":"string","enum":["black","white"]},{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}],"description":"`black`, `white` or `#RRGGBB`."},"enlarge":{"description":"Scale a smaller input up to the size (default true); false keeps it at its size, never larger.","type":"boolean"}},"additionalProperties":false},"color":{"description":"Brightness, contrast, saturation, gamma and hue.","type":"object","properties":{"brightness":{"type":"number","minimum":-1,"maximum":1},"contrast":{"type":"number","minimum":0,"maximum":3},"saturation":{"type":"number","minimum":0,"maximum":3},"gamma":{"type":"number","minimum":0.1,"maximum":10},"hue":{"type":"number","minimum":-180,"maximum":180}},"additionalProperties":false},"sharpen":{"description":"An unsharp mask.","type":"object","properties":{"amount":{"type":"number","minimum":0,"maximum":3},"size":{"anyOf":[{"type":"number","const":3},{"type":"number","const":5},{"type":"number","const":7}]}},"additionalProperties":false},"blur":{"description":"A box blur of the whole frame, or of up to 4 regions.","type":"object","properties":{"strength":{"type":"integer","minimum":1,"maximum":50},"regions":{"minItems":1,"maxItems":4,"type":"array","items":{"type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":7680},"y":{"type":"integer","minimum":0,"maximum":7680},"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680}},"required":["x","y","width","height"],"additionalProperties":false}}},"required":["strength"],"additionalProperties":false},"overlays":{"description":"Images or videos drawn over the picture, in order.","minItems":1,"maxItems":4,"type":"array","items":{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"position":{"type":"string","enum":["top-left","top","top-right","left","center","right","bottom-left","bottom","bottom-right"]},"margin":{"type":"integer","minimum":0,"maximum":1000},"width":{"type":"integer","minimum":8,"maximum":7680},"opacity":{"type":"number","minimum":0,"maximum":1},"start":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"end":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90}},"required":["input"],"additionalProperties":false}},"text":{"minItems":1,"maxItems":8,"type":"array","items":{"$ref":"#/components/schemas/TextLayer"},"description":"Up to 8 text layers, drawn after overlays in order."},"speed":{"description":"How fast it plays, 0.25 to 4; the sound keeps its pitch.","type":"number","minimum":0.25,"maximum":4},"fps":{"description":"A constant frame rate.","type":"number","minimum":1,"maximum":120},"fade":{"description":"Fade in at the start and out at the end; `out` needs `trim.duration` or `trim.end`.","type":"object","properties":{"in":{"type":"number","minimum":0.1,"maximum":60},"out":{"type":"number","minimum":0.1,"maximum":60},"color":{"type":"string","enum":["black","white"]}},"additionalProperties":false},"colors":{"description":"Colours in the palette.","type":"integer","minimum":2,"maximum":256},"strip_metadata":{"description":"Drop the input's global and stream metadata (GPS, device tags).","type":"boolean"},"preset":{"description":"A gif preset (`GET /v1/presets`); its options are the defaults and the output's own fields win.","type":"string","enum":["gif-preview"]}},"required":["input"],"additionalProperties":false},"AudioRequest":{"type":"object","properties":{"input":{"anyOf":[{"type":"string"},{"type":"string","pattern":"^videxo:\\/\\/uploads\\/(up_[a-f0-9]{24})$"},{"type":"object","properties":{"url":{"type":"string"}},"required":["url"],"additionalProperties":false},{"type":"object","properties":{"upload_id":{"type":"string","pattern":"^up_[a-f0-9]{24}$"}},"required":["upload_id"],"additionalProperties":false}],"description":"An http or https URL, `videxo://uploads/<upload_id>`, `{ \"url\" }` or `{ \"upload_id\" }`."},"extra_inputs":{"type":"object","propertyNames":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"additionalProperties":{"anyOf":[{"type":"string"},{"type":"string","pattern":"^videxo:\\/\\/uploads\\/(up_[a-f0-9]{24})$"},{"type":"object","properties":{"url":{"type":"string"}},"required":["url"],"additionalProperties":false},{"type":"object","properties":{"upload_id":{"type":"string","pattern":"^up_[a-f0-9]{24}$"}},"required":["upload_id"],"additionalProperties":false}],"description":"An http or https URL, `videxo://uploads/<upload_id>`, `{ \"url\" }` or `{ \"upload_id\" }`."}},"webhook_url":{"description":"An https URL that gets the job when it ends (M4).","anyOf":[{"type":"string","maxLength":2048,"format":"uri"},{"type":"null"}]},"metadata":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":40},"additionalProperties":{"type":"string","maxLength":500},"description":"Your own string pairs, returned with the job and its webhook: at most 20 keys of up to 40 characters, values up to 500.","example":{"order":"1234"}},"filename":{"description":"The stored file name, `<name>.<format>` by default; one extension, matching `format`.","type":"string","minLength":1,"maxLength":105},"format":{"description":"The container or image format; from `filename`, or the type's default.","type":"string","enum":["mp4","mov","webm","mkv","ts","mp3","m4a","aac","wav","flac","ogg","opus","jpg","png","gif","json"]},"trim":{"description":"The part of the input to use: `start`, and `end` or `duration`.","type":"object","properties":{"start":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"end":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"duration":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90}},"additionalProperties":false},"speed":{"description":"How fast it plays, 0.25 to 4; the sound keeps its pitch.","type":"number","minimum":0.25,"maximum":4},"fade":{"description":"Fade in at the start and out at the end; `out` needs `trim.duration` or `trim.end`.","type":"object","properties":{"in":{"type":"number","minimum":0.1,"maximum":60},"out":{"type":"number","minimum":0.1,"maximum":60},"color":{"type":"string","enum":["black","white"]}},"additionalProperties":false},"audio":{"description":"`false` for no sound, or the audio encoder and filters.","anyOf":[{"type":"boolean","const":false},{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"codec":{"type":"string","enum":["aac","mp3","opus","vorbis","flac","alac","pcm","copy"]},"quality":{"type":"string","enum":["low","medium","high"]},"bitrate":{"type":"string","pattern":"^(\\d{1,6})(?:\\.(\\d{1,3}))?([kM])$"},"sample_rate":{"type":"integer","minimum":8000,"maximum":192000},"channels":{"anyOf":[{"type":"number","const":1},{"type":"number","const":2}]},"volume":{"type":"number","minimum":0,"maximum":4},"normalize":{"anyOf":[{"type":"boolean","const":true},{"type":"object","properties":{"loudness":{"type":"number","minimum":-70,"maximum":-5},"true_peak":{"type":"number","minimum":-9,"maximum":0},"range":{"type":"number","minimum":1,"maximum":20}},"additionalProperties":false}]},"mix":{"minItems":1,"maxItems":4,"type":"array","items":{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"volume":{"type":"number","minimum":0,"maximum":4}},"required":["input"],"additionalProperties":false}}},"additionalProperties":false}]},"strip_metadata":{"description":"Drop the input's global and stream metadata (GPS, device tags).","type":"boolean"},"preset":{"description":"An audio preset (`GET /v1/presets`); its options are the defaults and the output's own fields win.","type":"string","enum":["podcast-audio"]}},"required":["input"],"additionalProperties":false},"ConcatRequest":{"oneOf":[{"$ref":"#/components/schemas/ConcatVideoRequest"},{"$ref":"#/components/schemas/ConcatAudioRequest"}]},"SlideshowRequest":{"type":"object","properties":{"images":{"minItems":1,"maxItems":16,"type":"array","items":{"anyOf":[{"anyOf":[{"type":"string"},{"type":"string","pattern":"^videxo:\\/\\/uploads\\/(up_[a-f0-9]{24})$"},{"type":"object","properties":{"url":{"type":"string"}},"required":["url"],"additionalProperties":false},{"type":"object","properties":{"upload_id":{"type":"string","pattern":"^up_[a-f0-9]{24}$"}},"required":["upload_id"],"additionalProperties":false}],"description":"An http or https URL, `videxo://uploads/<upload_id>`, `{ \"url\" }` or `{ \"upload_id\" }`."},{"type":"object","properties":{"source":{"anyOf":[{"type":"string"},{"type":"string","pattern":"^videxo:\\/\\/uploads\\/(up_[a-f0-9]{24})$"},{"type":"object","properties":{"url":{"type":"string"}},"required":["url"],"additionalProperties":false},{"type":"object","properties":{"upload_id":{"type":"string","pattern":"^up_[a-f0-9]{24}$"}},"required":["upload_id"],"additionalProperties":false}],"description":"An http or https URL, `videxo://uploads/<upload_id>`, `{ \"url\" }` or `{ \"upload_id\" }`."},"duration":{"type":"number","minimum":0.1,"maximum":300},"motion":{"description":"A slow zoom or pan across the picture, which then always fills the frame (Ken Burns).","type":"string","enum":["zoom-in","zoom-out","pan-left","pan-right","pan-up","pan-down"]},"text":{"minItems":1,"maxItems":4,"type":"array","items":{"$ref":"#/components/schemas/TextLayer"},"description":"Up to 4 text layers, drawn after overlays in order."},"transition":{"$ref":"#/components/schemas/Transition"}},"required":["source"],"additionalProperties":false}]},"description":"The pictures in order: sources, or `{ \"source\", \"duration\", \"motion\", \"text\", \"transition\" }`."},"duration":{"description":"Seconds each image stays on screen unless it says otherwise (default 3).","type":"number","minimum":0.1,"maximum":300},"motion":{"description":"A slow zoom or pan across the picture, which then always fills the frame (Ken Burns).","type":"string","enum":["zoom-in","zoom-out","pan-left","pan-right","pan-up","pan-down"]},"transition":{"description":"The transition into each image but the first, unless it sets its own.","$ref":"#/components/schemas/Transition"},"extra_inputs":{"type":"object","propertyNames":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"additionalProperties":{"anyOf":[{"type":"string"},{"type":"string","pattern":"^videxo:\\/\\/uploads\\/(up_[a-f0-9]{24})$"},{"type":"object","properties":{"url":{"type":"string"}},"required":["url"],"additionalProperties":false},{"type":"object","properties":{"upload_id":{"type":"string","pattern":"^up_[a-f0-9]{24}$"}},"required":["upload_id"],"additionalProperties":false}],"description":"An http or https URL, `videxo://uploads/<upload_id>`, `{ \"url\" }` or `{ \"upload_id\" }`."}},"webhook_url":{"description":"An https URL that gets the job when it ends (M4).","anyOf":[{"type":"string","maxLength":2048,"format":"uri"},{"type":"null"}]},"metadata":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":40},"additionalProperties":{"type":"string","maxLength":500},"description":"Your own string pairs, returned with the job and its webhook: at most 20 keys of up to 40 characters, values up to 500.","example":{"order":"1234"}},"filename":{"description":"The stored file name, `<name>.<format>` by default; one extension, matching `format`.","type":"string","minLength":1,"maxLength":105},"format":{"description":"The container or image format; from `filename`, or the type's default.","type":"string","enum":["mp4","mov","webm","mkv","ts","mp3","m4a","aac","wav","flac","ogg","opus","jpg","png","gif","json"]},"trim":{"description":"The part of the input to use: `start`, and `end` or `duration`.","type":"object","properties":{"start":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"end":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"duration":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90}},"additionalProperties":false},"crop":{"description":"A rectangle of the input frame, in input pixels.","type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":7680},"y":{"type":"integer","minimum":0,"maximum":7680},"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680}},"required":["x","y","width","height"],"additionalProperties":false},"rotate":{"description":"Degrees clockwise.","anyOf":[{"type":"number","const":90},{"type":"number","const":180},{"type":"number","const":270}]},"flip":{"description":"Mirror the picture.","type":"string","enum":["horizontal","vertical"]},"resize":{"description":"A new size: `width`, `height`, `aspect`, and how the picture fits (`fit`).","type":"object","properties":{"width":{"type":"integer","minimum":16,"maximum":7680,"multipleOf":2},"height":{"type":"integer","minimum":16,"maximum":7680,"multipleOf":2},"aspect":{"type":"string","enum":["16:9","9:16","1:1","4:5","4:3","3:4"]},"fit":{"type":"string","enum":["contain","cover","pad"]},"anchor":{"type":"string","enum":["center","top","bottom","left","right"]},"pad_color":{"anyOf":[{"type":"string","enum":["black","white"]},{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}],"description":"`black`, `white` or `#RRGGBB`."},"enlarge":{"description":"Scale a smaller input up to the size (default true); false keeps it at its size, never larger.","type":"boolean"}},"additionalProperties":false},"color":{"description":"Brightness, contrast, saturation, gamma and hue.","type":"object","properties":{"brightness":{"type":"number","minimum":-1,"maximum":1},"contrast":{"type":"number","minimum":0,"maximum":3},"saturation":{"type":"number","minimum":0,"maximum":3},"gamma":{"type":"number","minimum":0.1,"maximum":10},"hue":{"type":"number","minimum":-180,"maximum":180}},"additionalProperties":false},"sharpen":{"description":"An unsharp mask.","type":"object","properties":{"amount":{"type":"number","minimum":0,"maximum":3},"size":{"anyOf":[{"type":"number","const":3},{"type":"number","const":5},{"type":"number","const":7}]}},"additionalProperties":false},"blur":{"description":"A box blur of the whole frame, or of up to 4 regions.","type":"object","properties":{"strength":{"type":"integer","minimum":1,"maximum":50},"regions":{"minItems":1,"maxItems":4,"type":"array","items":{"type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":7680},"y":{"type":"integer","minimum":0,"maximum":7680},"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680}},"required":["x","y","width","height"],"additionalProperties":false}}},"required":["strength"],"additionalProperties":false},"overlays":{"description":"Images or videos drawn over the picture, in order.","minItems":1,"maxItems":4,"type":"array","items":{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"position":{"type":"string","enum":["top-left","top","top-right","left","center","right","bottom-left","bottom","bottom-right"]},"margin":{"type":"integer","minimum":0,"maximum":1000},"width":{"type":"integer","minimum":8,"maximum":7680},"opacity":{"type":"number","minimum":0,"maximum":1},"start":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"end":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90}},"required":["input"],"additionalProperties":false}},"text":{"minItems":1,"maxItems":8,"type":"array","items":{"$ref":"#/components/schemas/TextLayer"},"description":"Up to 8 text layers, drawn after overlays in order."},"subtitles":{"$ref":"#/components/schemas/Subtitles"},"speed":{"description":"How fast it plays, 0.25 to 4; the sound keeps its pitch.","type":"number","minimum":0.25,"maximum":4},"fps":{"description":"A constant frame rate.","type":"number","minimum":1,"maximum":120},"fade":{"description":"Fade in at the start and out at the end; `out` needs `trim.duration` or `trim.end`.","type":"object","properties":{"in":{"type":"number","minimum":0.1,"maximum":60},"out":{"type":"number","minimum":0.1,"maximum":60},"color":{"type":"string","enum":["black","white"]}},"additionalProperties":false},"video":{"description":"The video encoder: codec, quality or CRF, preset, maximum bitrate, pixel format.","type":"object","properties":{"codec":{"type":"string","enum":["h264","h265","vp9","av1","copy"]},"quality":{"type":"string","enum":["low","medium","high","lossless"]},"crf":{"type":"integer","minimum":0,"maximum":63},"encoder_preset":{"type":"string","enum":["ultrafast","superfast","veryfast","faster","fast","medium","slow"]},"max_bitrate":{"type":"string","pattern":"^(\\d{1,6})(?:\\.(\\d{1,3}))?([kM])$"},"pixel_format":{"type":"string","enum":["yuv420p","yuv422p","yuv444p","yuv420p10le"]},"faststart":{"type":"boolean"}},"additionalProperties":false},"audio":{"description":"`false` for no sound, or the audio encoder and filters.","anyOf":[{"type":"boolean","const":false},{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"codec":{"type":"string","enum":["aac","mp3","opus","vorbis","flac","alac","pcm","copy"]},"quality":{"type":"string","enum":["low","medium","high"]},"bitrate":{"type":"string","pattern":"^(\\d{1,6})(?:\\.(\\d{1,3}))?([kM])$"},"sample_rate":{"type":"integer","minimum":8000,"maximum":192000},"channels":{"anyOf":[{"type":"number","const":1},{"type":"number","const":2}]},"volume":{"type":"number","minimum":0,"maximum":4},"normalize":{"anyOf":[{"type":"boolean","const":true},{"type":"object","properties":{"loudness":{"type":"number","minimum":-70,"maximum":-5},"true_peak":{"type":"number","minimum":-9,"maximum":0},"range":{"type":"number","minimum":1,"maximum":20}},"additionalProperties":false}]},"mix":{"minItems":1,"maxItems":4,"type":"array","items":{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"volume":{"type":"number","minimum":0,"maximum":4}},"required":["input"],"additionalProperties":false}}},"additionalProperties":false}]},"visualize":{"description":"A waveform or spectrum video drawn from the input's sound.","type":"object","properties":{"style":{"type":"string","enum":["waveform","spectrum"]},"width":{"type":"integer","minimum":16,"maximum":7680,"multipleOf":2},"height":{"type":"integer","minimum":16,"maximum":7680,"multipleOf":2},"fps":{"type":"integer","minimum":1,"maximum":60}},"required":["style"],"additionalProperties":false},"strip_metadata":{"description":"Drop the input's global and stream metadata (GPS, device tags).","type":"boolean"},"preset":{"description":"A video preset (`GET /v1/presets`); its options are the defaults and the output's own fields win.","type":"string","enum":["web-720p","web-1080p","social-vertical","square"]}},"required":["images"],"additionalProperties":false},"ScenesRequest":{"type":"object","properties":{"input":{"anyOf":[{"type":"string"},{"type":"string","pattern":"^videxo:\\/\\/uploads\\/(up_[a-f0-9]{24})$"},{"type":"object","properties":{"url":{"type":"string"}},"required":["url"],"additionalProperties":false},{"type":"object","properties":{"upload_id":{"type":"string","pattern":"^up_[a-f0-9]{24}$"}},"required":["upload_id"],"additionalProperties":false}],"description":"An http or https URL, `videxo://uploads/<upload_id>`, `{ \"url\" }` or `{ \"upload_id\" }`."},"extra_inputs":{"type":"object","propertyNames":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"additionalProperties":{"anyOf":[{"type":"string"},{"type":"string","pattern":"^videxo:\\/\\/uploads\\/(up_[a-f0-9]{24})$"},{"type":"object","properties":{"url":{"type":"string"}},"required":["url"],"additionalProperties":false},{"type":"object","properties":{"upload_id":{"type":"string","pattern":"^up_[a-f0-9]{24}$"}},"required":["upload_id"],"additionalProperties":false}],"description":"An http or https URL, `videxo://uploads/<upload_id>`, `{ \"url\" }` or `{ \"upload_id\" }`."}},"webhook_url":{"description":"An https URL that gets the job when it ends (M4).","anyOf":[{"type":"string","maxLength":2048,"format":"uri"},{"type":"null"}]},"metadata":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":40},"additionalProperties":{"type":"string","maxLength":500},"description":"Your own string pairs, returned with the job and its webhook: at most 20 keys of up to 40 characters, values up to 500.","example":{"order":"1234"}},"filename":{"description":"The stored file name, `<name>.<format>` by default; one extension, matching `format`.","type":"string","minLength":1,"maxLength":105},"format":{"description":"`json`, the only format.","type":"string","const":"json"},"trim":{"description":"The part of the input to use: `start`, and `end` or `duration`.","type":"object","properties":{"start":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"end":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"duration":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90}},"additionalProperties":false},"threshold":{"description":"The score, 1 to 100, at which a frame starts a new scene (default 10, scdet's).","type":"number","minimum":1,"maximum":100}},"required":["input"],"additionalProperties":false},"ProbeResponse":{"type":"object","properties":{"id":{"type":"string","pattern":"^job_[a-z0-9]{24}$","description":"`job_` and 24 lowercase letters and digits.","example":"job_3k9x0c2mfq8w1n7r5t4b6v2z"},"state":{"$ref":"#/components/schemas/JobState"},"kind":{"type":"string","enum":["command","operations"],"description":"How the job was described: a command body or an operations body."},"operation":{"type":["string","null"],"enum":["transcode","thumbnails","storyboard","gif","audio","concat","slideshow","probe","scenes",null],"description":"The per-operation endpoint that made the job (`transcode`, `thumbnails`, ...); null otherwise."},"spec":{"type":["object","null"],"properties":{"inputs":{"type":"object","additionalProperties":{"anyOf":[{"type":"object","properties":{"url":{"type":"string"}},"required":["url"]},{"type":"object","properties":{"upload_id":{"type":"string"}},"required":["upload_id"]}]}},"outputs":{"type":"array","items":{"$ref":"#/components/schemas/Output"}}},"required":["inputs","outputs"],"description":"The operations body as accepted, presets expanded and defaults filled; null for a command job."},"command":{"type":["string","null"],"description":"The ffmpeg arguments the job runs; for an operations job, the compiled command without its metadata outputs. Null when every output is metadata (no ffmpeg runs)."},"input_files":{"type":["object","null"],"additionalProperties":{"type":"string"},"description":"The inputs of `command`; an input only metadata outputs read is not listed. Null without a command."},"output_files":{"type":["object","null"],"additionalProperties":{"type":"string"},"description":"The outputs of `command`; metadata outputs are not listed. Null without a command."},"ffmpeg_command":{"type":["string","null"],"description":"One shell line that runs the command with a local ffmpeg: aliases replaced by the input URLs (an upload by its file name) and the output file names. Null without a command."},"steps":{"type":"array","items":{"$ref":"#/components/schemas/JobStep"},"description":"What the job runs, in order; a command job has one step, `ffmpeg`."},"webhook_url":{"type":["string","null"]},"metadata":{"type":"object","additionalProperties":{"type":"string"}},"progress":{"type":["number","null"],"minimum":0,"maximum":1,"description":"From 0 to 1 while running; null when unknown."},"error":{"type":["object","null"],"properties":{"code":{"type":"string","enum":["limit_exceeded","usage_cap_reached","out_of_credits","service_unavailable","internal_error","input_unreachable","processing_failed"],"description":"The stable error code (the Errors page lists each one)."},"reason":{"type":["string","null"],"enum":["missing_api_key","invalid_api_key","api_key_revoked","api_key_expired","missing_client_token","invalid_client_token","client_token_expired","client_token_superseded","client_token_revoked","missing_credentials","invalid_token","token_expired","token_revoked","account_disabled","link_invalid","origin_not_allowed","role_insufficient","token_scope","client_token_required","insufficient_scope","invalid_fields","not_json","range_not_satisfiable","size_mismatch","job","file","output","upload","webhook_endpoint","webhook_delivery","route","subscription","ticket","client_token","job_active","upload_used","webhook_endpoint_exists","webhook_delivery_pending","idempotency_key_reused","checkout_pending","subscription_exists","same_plan","ticket_closed","link_expired","file_expired","upload_expired","request_body_size","upload_size","input_size","output_size","job_duration","low_balance","member_limit","organization_limit","token_uploads","subtitles_size","temporary","cancel_unconfirmed","queue_timeout","url_refused","http_status","network","redirects","too_slow","ffmpeg_error","output_empty","time_past_end","subtitles_invalid","media_unreadable",null],"description":"The documented finer case of the code, or null."},"message":{"type":"string","description":"What happened, for people; it may change."},"retryable":{"type":"boolean","description":"Whether creating the same job again can succeed without a change."},"log_tail":{"type":["string","null"],"description":"With `processing_failed` `ffmpeg_error`: ffmpeg's last lines about the media, once available; null otherwise."}},"required":["code","reason","message","retryable","log_tail"],"description":"Why the job failed; null unless the state is failed."},"outputs":{"type":"array","items":{"$ref":"#/components/schemas/JobOutput"},"description":"The stored files, once the job succeeded."},"usage":{"type":["object","null"],"properties":{"seconds":{"type":"integer","minimum":0},"input_bytes":{"type":"integer","minimum":0},"output_bytes":{"type":"integer","minimum":0},"credits":{"type":"number","minimum":0,"description":"Credits, with one decimal: the sum of the bill rounded up once, and never more than the job held, which can make it less than that sum."},"bill":{"type":["object","null"],"properties":{"lines":{"type":"array","items":{"type":"object","properties":{"kind":{"type":"string","enum":["copy","audio","gif","video","image","metadata","scenes"]},"seconds":{"type":"integer","minimum":0,"description":"Seconds billed, rounded up per output; a kind billed by duration."},"images":{"type":"integer","minimum":0},"per_minute":{"type":"number","minimum":0,"description":"The kind's or video tier's credits per minute, before multipliers."},"multiplier":{"type":"number","exclusiveMinimum":0,"description":"The codec and frame rate multipliers, multiplied together."},"credits":{"type":"number","minimum":0,"description":"The exact credits of this part, to three decimals, before the job is rounded."}},"required":["kind","credits"]},"description":"One per stored output, and one per video stream of an output with several. None when no output was stored."},"data":{"type":"object","properties":{"input_bytes":{"type":"integer","minimum":0},"output_bytes":{"type":"integer","minimum":0},"credits":{"type":"number","minimum":0,"description":"The exact credits of this part, to three decimals, before the job is rounded."}},"required":["input_bytes","output_bytes","credits"]},"processing":{"type":"object","properties":{"seconds":{"type":"integer","minimum":0},"included_seconds":{"type":"integer","minimum":0,"description":"Processing the lines include: 3 seconds per billed second and per image."},"credits":{"type":"number","minimum":0,"description":"The processing beyond what is included, at 10 credits per minute."}},"required":["seconds","included_seconds","credits"]}},"default":null,"required":["lines","data","processing"],"description":"What the credits are made of; null for an AI job, a job that used nothing and a job from before this field."}},"required":["seconds","input_bytes","output_bytes","credits"],"description":"What the job used, once it ended."},"created_at":{"type":"string","format":"date-time"},"started_at":{"type":["string","null"],"format":"date-time"},"finished_at":{"type":["string","null"],"format":"date-time"},"probe":{"type":["object","null"],"properties":{"container":{"type":["string","null"],"description":"ffprobe's name for the format, such as `mov,mp4,m4a,3gp,3g2,mj2`."},"duration":{"type":["number","null"],"description":"Seconds: the latest end among the container and its streams, from the start of the file. Null when nothing tells."},"start_time":{"type":["number","null"],"description":"The seconds the file starts at; most files start at 0."},"size_bytes":{"type":["integer","null"],"minimum":0},"bit_rate":{"type":["integer","null"],"minimum":0,"description":"Bits per second, of the whole file."},"tags":{"type":"object","additionalProperties":{"type":"string"},"description":"Tags from a fixed list of keys, each value at most 256 characters. Location and device tags are never copied."},"streams":{"type":"array","items":{"$ref":"#/components/schemas/MediaStream"},"description":"At most 64, in file order."}},"required":["container","duration","start_time","size_bytes","bit_rate","tags","streams"],"description":"The document, once the job succeeded. Null while it runs or when it failed."}},"required":["id","state","kind","operation","spec","command","input_files","output_files","ffmpeg_command","steps","webhook_url","metadata","progress","error","outputs","usage","created_at","started_at","finished_at","probe"]},"MediaStream":{"type":"object","properties":{"index":{"type":"integer","minimum":0},"type":{"type":"string","enum":["video","audio","subtitle","data","attachment"]},"codec":{"type":["string","null"]},"profile":{"type":["string","null"]},"duration":{"type":["number","null"],"description":"Seconds, as the stream says; null when it does not."},"bit_rate":{"type":["integer","null"],"minimum":0,"description":"Bits per second."},"width":{"type":["integer","null"],"minimum":0,"description":"Video only: as stored, before `rotation`."},"height":{"type":["integer","null"],"minimum":0,"description":"Video only: as stored, before `rotation`."},"rotation":{"type":["integer","null"],"minimum":0,"maximum":359,"description":"Video only: degrees clockwise to display the picture."},"fps":{"type":["number","null"],"description":"Video only: the average frame rate."},"pixel_format":{"type":["string","null"],"description":"Video only."},"frames":{"type":["integer","null"],"minimum":0,"description":"Video only: when the container says."},"cover_art":{"type":"boolean","description":"Video only: an attached picture, such as album art, not a video."},"channels":{"type":["integer","null"],"minimum":0,"description":"Audio only."},"channel_layout":{"type":["string","null"],"description":"Audio only."},"sample_rate":{"type":["integer","null"],"minimum":0,"description":"Audio only: in Hz."},"tags":{"type":"object","additionalProperties":{"type":"string"},"description":"Tags from a fixed list of keys, each value at most 256 characters. Location and device tags are never copied."}},"required":["index","type","codec","profile","duration","bit_rate","tags"]},"ProbeRequest":{"type":"object","properties":{"input":{"anyOf":[{"type":"string"},{"type":"string","pattern":"^videxo:\\/\\/uploads\\/(up_[a-f0-9]{24})$"},{"type":"object","properties":{"url":{"type":"string"}},"required":["url"],"additionalProperties":false},{"type":"object","properties":{"upload_id":{"type":"string","pattern":"^up_[a-f0-9]{24}$"}},"required":["upload_id"],"additionalProperties":false}],"description":"An http or https URL, `videxo://uploads/<upload_id>`, `{ \"url\" }` or `{ \"upload_id\" }`."},"filename":{"description":"The stored file name, `<name>.<format>` by default; one extension, matching `format`.","type":"string","minLength":1,"maxLength":105},"webhook_url":{"description":"An https URL that gets the job when it ends (M4).","anyOf":[{"type":"string","maxLength":2048,"format":"uri"},{"type":"null"}]},"metadata":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":40},"additionalProperties":{"type":"string","maxLength":500},"description":"Your own string pairs, returned with the job and its webhook: at most 20 keys of up to 40 characters, values up to 500.","example":{"order":"1234"}}},"required":["input"],"additionalProperties":false},"PresetList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Preset"}}},"required":["data"]},"Preset":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string","enum":["video","audio","image","storyboard","gif","metadata","scenes"]},"description":{"type":"string"},"deprecated":{"type":"boolean","description":"A deprecated preset keeps working through /v1."},"output":{"$ref":"#/components/schemas/PresetOptions"}},"required":["name","type","description","deprecated","output"]},"PresetOptions":{"type":"object","properties":{"format":{"type":"string","enum":["mp4","mov","webm","mkv","ts","mp3","m4a","aac","wav","flac","ogg","opus","jpg","png","gif","json"],"description":"The container or image format; from `filename`, or the type's default."},"strip_metadata":{"type":"boolean","description":"Drop the input's global and stream metadata (GPS, device tags)."},"trim":{"type":"object","properties":{"start":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"end":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"duration":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90}},"additionalProperties":false,"description":"The part of the input to use: `start`, and `end` or `duration`."},"crop":{"type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":7680},"y":{"type":"integer","minimum":0,"maximum":7680},"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680}},"required":["x","y","width","height"],"additionalProperties":false,"description":"A rectangle of the input frame, in input pixels."},"rotate":{"anyOf":[{"type":"number","enum":[90]},{"type":"number","enum":[180]},{"type":"number","enum":[270]}],"description":"Degrees clockwise."},"flip":{"type":"string","enum":["horizontal","vertical"],"description":"Mirror the picture."},"resize":{"type":"object","properties":{"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680},"aspect":{"type":"string","enum":["16:9","9:16","1:1","4:5","4:3","3:4"]},"fit":{"type":"string","enum":["contain","cover","pad"]},"anchor":{"type":"string","enum":["center","top","bottom","left","right"]},"pad_color":{"anyOf":[{"type":"string","enum":["black","white"]},{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}],"description":"`black`, `white` or `#RRGGBB`."},"enlarge":{"type":"boolean","description":"Scale a smaller input up to the size (default true); false keeps it at its size, never larger."}},"additionalProperties":false,"description":"A new size: `width`, `height`, `aspect`, and how the picture fits (`fit`)."},"speed":{"type":"number","minimum":0.25,"maximum":4,"description":"How fast it plays, 0.25 to 4; the sound keeps its pitch."},"fps":{"type":"number","minimum":1,"maximum":120,"description":"A constant frame rate."},"color":{"type":"object","properties":{"brightness":{"type":"number","minimum":-1,"maximum":1},"contrast":{"type":"number","minimum":0,"maximum":3},"saturation":{"type":"number","minimum":0,"maximum":3},"gamma":{"type":"number","minimum":0.1,"maximum":10},"hue":{"type":"number","minimum":-180,"maximum":180}},"additionalProperties":false,"description":"Brightness, contrast, saturation, gamma and hue."},"sharpen":{"type":"object","properties":{"amount":{"type":"number","minimum":0,"maximum":3},"size":{"anyOf":[{"type":"number","enum":[3]},{"type":"number","enum":[5]},{"type":"number","enum":[7]}]}},"additionalProperties":false,"description":"An unsharp mask."},"blur":{"type":"object","properties":{"strength":{"type":"integer","minimum":1,"maximum":50},"regions":{"type":"array","items":{"type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":7680},"y":{"type":"integer","minimum":0,"maximum":7680},"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680}},"required":["x","y","width","height"],"additionalProperties":false},"minItems":1,"maxItems":4}},"required":["strength"],"additionalProperties":false,"description":"A box blur of the whole frame, or of up to 4 regions."},"overlays":{"type":"array","items":{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"position":{"type":"string","enum":["top-left","top","top-right","left","center","right","bottom-left","bottom","bottom-right"]},"margin":{"type":"integer","minimum":0,"maximum":1000},"width":{"type":"integer","minimum":8,"maximum":7680},"opacity":{"type":"number","minimum":0,"maximum":1},"start":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"end":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90}},"required":["input"],"additionalProperties":false},"minItems":1,"maxItems":4,"description":"Images or videos drawn over the picture, in order."},"text":{"type":"array","items":{"$ref":"#/components/schemas/TextLayer"},"minItems":1,"maxItems":8,"description":"Up to 8 text layers, drawn after overlays in order."},"fade":{"type":"object","properties":{"in":{"type":"number","minimum":0.1,"maximum":60},"out":{"type":"number","minimum":0.1,"maximum":60},"color":{"type":"string","enum":["black","white"]}},"additionalProperties":false,"description":"Fade in at the start and out at the end; `out` needs `trim.duration` or `trim.end`."},"video":{"type":"object","properties":{"codec":{"type":"string","enum":["h264","h265","vp9","av1","copy"]},"quality":{"type":"string","enum":["low","medium","high","lossless"]},"crf":{"type":"integer","minimum":0,"maximum":63},"encoder_preset":{"type":"string","enum":["ultrafast","superfast","veryfast","faster","fast","medium","slow"]},"max_bitrate":{"type":"string","pattern":"^(\\d{1,6})(?:\\.(\\d{1,3}))?([kM])$"},"pixel_format":{"type":"string","enum":["yuv420p","yuv422p","yuv444p","yuv420p10le"]},"faststart":{"type":"boolean"}},"additionalProperties":false,"description":"The video encoder: codec, quality or CRF, preset, maximum bitrate, pixel format."},"audio":{"anyOf":[{"type":"boolean","enum":[false]},{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"codec":{"type":"string","enum":["aac","mp3","opus","vorbis","flac","alac","pcm","copy"]},"quality":{"type":"string","enum":["low","medium","high"]},"bitrate":{"type":"string","pattern":"^(\\d{1,6})(?:\\.(\\d{1,3}))?([kM])$"},"sample_rate":{"type":"integer","minimum":8000,"maximum":192000},"channels":{"anyOf":[{"type":"number","enum":[1]},{"type":"number","enum":[2]}]},"volume":{"type":"number","minimum":0,"maximum":4},"normalize":{"anyOf":[{"type":"boolean","enum":[true]},{"type":"object","properties":{"loudness":{"type":"number","minimum":-70,"maximum":-5},"true_peak":{"type":"number","minimum":-9,"maximum":0},"range":{"type":"number","minimum":1,"maximum":20}},"additionalProperties":false}]},"mix":{"type":"array","items":{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"volume":{"type":"number","minimum":0,"maximum":4}},"required":["input"],"additionalProperties":false},"minItems":1,"maxItems":4}},"additionalProperties":false}],"description":"`false` for no sound, or the audio encoder and filters."},"visualize":{"type":"object","properties":{"style":{"type":"string","enum":["waveform","spectrum"]},"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680},"fps":{"type":"integer","minimum":1,"maximum":60}},"required":["style"],"additionalProperties":false,"description":"A waveform or spectrum video drawn from the input's sound."},"at":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"},{"type":"string","enum":["auto"]}],"description":"The frame time, or `\"auto\"` for the most representative of the first 300 frames."},"times":{"type":"array","items":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"minItems":1,"maxItems":16,"description":"One image per time, `<name>_1`, `<name>_2`, ...; not with `at`."},"quality":{"type":"string","enum":["low","medium","high"],"description":"JPEG quality; PNG ignores it."},"interval":{"type":"number","minimum":0.5,"maximum":3600,"description":"Seconds between frames."},"columns":{"type":"integer","minimum":1,"maximum":16,"description":"Frames across."},"rows":{"type":"integer","minimum":1,"maximum":16,"description":"Frames down."},"tile_width":{"type":"integer","minimum":16,"maximum":640,"description":"Each frame fits in a square of this many pixels."},"exact_times":{"type":"boolean","description":"Decode every frame for exact tile times, instead of key frames only."},"colors":{"type":"integer","minimum":2,"maximum":256,"description":"Colours in the palette."},"threshold":{"type":"number","minimum":1,"maximum":100,"description":"The score, 1 to 100, at which a frame starts a new scene (default 10, scdet's)."}},"additionalProperties":false,"description":"A preset's options, as the fields of an output of its type."},"JobList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Job"},"description":"Newest first."},"next_cursor":{"type":["string","null"],"description":"Pass as `cursor` for the next page; null on the last page."}},"required":["data","next_cursor"]},"WebhookSecret":{"type":"object","properties":{"secret":{"type":"string","description":"`whsec_` and the base64 key. Verify signatures with it.","example":"whsec_..."},"created_at":{"type":"string","format":"date-time"},"rotated_at":{"type":["string","null"],"format":"date-time"},"previous_secret_expires_at":{"type":["string","null"],"format":"date-time","description":"Until then deliveries carry a second signature made with the previous secret."}},"required":["secret","created_at","rotated_at","previous_secret_expires_at"]},"WebhookEndpointList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/WebhookEndpoint"}}},"required":["data"]},"WebhookEndpoint":{"type":"object","properties":{"id":{"type":"string","pattern":"^we_[a-z0-9]{24}$","description":"`we_` and 24 lowercase letters and digits.","example":"we_4n8c2kq0x7m1v5z3b9r6t0wa"},"url":{"type":"string"},"enabled":{"type":"boolean","description":"A disabled endpoint gets no new deliveries."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}},"required":["id","url","enabled","created_at","updated_at"]},"CreateWebhookEndpointRequest":{"type":"object","properties":{"url":{"type":"string","maxLength":2048,"format":"uri","description":"A public https URL on the default port.","example":"https://example.com/hooks/videxo"},"enabled":{"type":"boolean","default":true}},"required":["url"],"additionalProperties":false},"UpdateWebhookEndpointRequest":{"type":"object","properties":{"url":{"type":"string","maxLength":2048,"format":"uri","description":"A public https URL on the default port.","example":"https://example.com/hooks/videxo"},"enabled":{"type":"boolean"}},"additionalProperties":false},"WebhookDeliveryList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/WebhookDelivery"},"description":"Newest first."},"next_cursor":{"type":["string","null"],"description":"Pass as `cursor` for the next page; null on the last page."}},"required":["data","next_cursor"]},"WebhookDelivery":{"type":"object","properties":{"id":{"type":"string","pattern":"^msg_[a-f0-9]{24}$","description":"The `webhook-id` header of the delivery: `msg_` and 24 hex digits.","example":"msg_5d0c8f7a1b2e4c6d9e0f1a2b"},"job_id":{"type":"string","pattern":"^job_[a-z0-9]{24}$","description":"`job_` and 24 lowercase letters and digits.","example":"job_3k9x0c2mfq8w1n7r5t4b6v2z"},"event_type":{"$ref":"#/components/schemas/WebhookEventType"},"target":{"type":"string","enum":["job_url","endpoint"],"description":"`job_url`: the job's `webhook_url`; `endpoint`: the default endpoint."},"endpoint_id":{"type":["string","null"],"pattern":"^we_[a-z0-9]{24}$","description":"`we_` and 24 lowercase letters and digits.","example":"we_4n8c2kq0x7m1v5z3b9r6t0wa"},"url":{"type":"string","description":"Where the delivery goes (for an endpoint, its URL at the last attempt)."},"status":{"$ref":"#/components/schemas/WebhookDeliveryStatus"},"attempts":{"type":"integer","minimum":0},"max_attempts":{"type":"integer","exclusiveMinimum":0},"next_attempt_at":{"type":["string","null"],"format":"date-time","description":"When the next attempt is due; null unless pending."},"last_attempt_at":{"type":["string","null"],"format":"date-time"},"last_status_code":{"type":["integer","null"]},"last_error":{"type":["string","null"],"enum":["http_status","redirect","timeout","network_error","url_refused","endpoint_disabled","endpoint_deleted","internal_error",null],"description":"Why the last attempt failed; null after a 2xx."},"last_duration_ms":{"type":["integer","null"],"minimum":0},"last_response_body":{"type":["string","null"],"description":"The first 2048 bytes of the last answer, as text."},"delivered_at":{"type":["string","null"],"format":"date-time"},"created_at":{"type":"string","format":"date-time"}},"required":["id","job_id","event_type","target","endpoint_id","url","status","attempts","max_attempts","next_attempt_at","last_attempt_at","last_status_code","last_error","last_duration_ms","last_response_body","delivered_at","created_at"]},"WebhookEventType":{"type":"string","enum":["job.succeeded","job.failed","job.cancelled"]},"WebhookDeliveryStatus":{"type":"string","enum":["pending","delivered","failed"],"description":"pending: will be attempted (again); delivered: a 2xx answer; failed: gave up."},"ClientToken":{"type":"object","properties":{"id":{"type":"string","pattern":"^ct_[a-z0-9]{24}$","description":"The id of a client token.","example":"ct_4m8x2k9q0c3v7n1r5t6b2z8w"},"token":{"type":"string","description":"The token, shown once: hand it and `id` to the app. Opaque: never parse it.","example":"vdx_ct_AWdK3xA..."},"chain_id":{"type":"string","pattern":"^ct_[a-z0-9]{24}$","description":"The id of the first token of its chain.","example":"ct_4m8x2k9q0c3v7n1r5t6b2z8w"},"expires_at":{"type":"string","format":"date-time"},"grant":{"$ref":"#/components/schemas/ClientGrant"}},"required":["id","token","chain_id","expires_at","grant"]},"ClientGrant":{"type":"object","properties":{"subject":{"type":["string","null"]},"allowed_origins":{"type":["array","null"],"items":{"type":"string"},"description":"Null: any origin, and native apps."},"uploads":{"type":["object","null"],"properties":{"max_count":{"type":"integer"},"max_size_bytes":{"type":"integer"},"content_types":{"type":"array","items":{"type":"string"}}},"required":["max_count","max_size_bytes","content_types"],"description":"Null: the token creates no uploads."},"jobs":{"type":["object","null"],"properties":{"read":{"type":"array","items":{"type":"string","pattern":"^job_[a-z0-9]{24}$","description":"`job_` and 24 lowercase letters and digits.","example":"job_3k9x0c2mfq8w1n7r5t4b6v2z"}}},"required":["read"],"description":"Null: the token reads no jobs."}},"required":["subject","allowed_origins","uploads","jobs"]},"CreateClientTokenRequest":{"type":"object","properties":{"ttl_seconds":{"type":"integer","minimum":60,"maximum":21600,"default":900,"description":"Lifetime in seconds, 60 to 21600 (6 hours); 900 by default."},"subject":{"type":"string","pattern":"^[A-Za-z0-9._:@-]{1,128}$","description":"Your own opaque id of the end user (never an email): stored, shown in your logs and used to revoke their tokens at once.","example":"user_8f2c"},"allowed_origins":{"type":"array","items":{"type":"string","maxLength":256},"minItems":1,"maxItems":5,"description":"Up to 5 exact browser origins; a request from another origin is refused. Leave out for native apps and any origin."},"continues":{"type":"string","pattern":"^ct_[a-z0-9]{24}$","description":"Any token of the same subject's chain, to refresh it: the new token keeps the chain's uploads count and read job ids, and is no wider than the chain's newest token.","example":"ct_4m8x2k9q0c3v7n1r5t6b2z8w"},"uploads":{"$ref":"#/components/schemas/ClientUploadsGrant"},"jobs":{"$ref":"#/components/schemas/ClientJobsGrant"}},"additionalProperties":false},"ClientUploadsGrant":{"type":"object","properties":{"max_count":{"type":"integer","minimum":1,"maximum":10,"description":"Uploads the token's chain may create, 1 to 10; a refresh never resets it."},"max_size_bytes":{"type":"integer","exclusiveMinimum":0,"description":"The largest upload, in bytes: at most 100 MB and the plan's input limit."},"content_types":{"type":"array","items":{"type":"string","maxLength":128,"pattern":"^[a-z0-9!#$&^_.+-]+\\/(?:\\*|[a-z0-9!#$&^_.+-]+)$"},"minItems":1,"maxItems":10,"description":"Declared media types the uploads may have, exact or `type/*`; `video/*`, `audio/*`, `image/*` by default."}},"required":["max_count","max_size_bytes"],"additionalProperties":false},"ClientJobsGrant":{"type":"object","properties":{"read":{"type":"array","items":{"type":"string","pattern":"^job_[a-z0-9]{24}$","description":"`job_` and 24 lowercase letters and digits.","example":"job_3k9x0c2mfq8w1n7r5t4b6v2z"},"minItems":1,"maxItems":10,"description":"Ids of your jobs the token may read, 1 to 10."}},"required":["read"],"additionalProperties":false},"RevokedClientTokens":{"type":"object","properties":{"revoked":{"type":"integer","minimum":0,"description":"Tokens revoked, with their chains."}},"required":["revoked"]},"RevokeClientTokensRequest":{"type":"object","properties":{"subject":{"type":"string","pattern":"^[A-Za-z0-9._:@-]{1,128}$","description":"Your own opaque id of the end user (never an email): stored, shown in your logs and used to revoke their tokens at once.","example":"user_8f2c"}},"required":["subject"],"additionalProperties":false},"VideoOutput":{"type":"object","properties":{"name":{"description":"Required when the job has several outputs; `main` when it has one. The alias is `out_<name>`.","type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$"},"filename":{"description":"The stored file name, `<name>.<format>` by default; one extension, matching `format`.","type":"string","minLength":1,"maxLength":105},"format":{"description":"The container or image format; from `filename`, or the type's default.","type":"string","enum":["mp4","mov","webm","mkv","ts","mp3","m4a","aac","wav","flac","ogg","opus","jpg","png","gif","json"]},"input":{"description":"The input it reads; required when the job has several, unless `concat` is set.","type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$"},"concat":{"description":"Parts played one after another: input names, `{ \"input\", \"start\", \"end\", \"transition\" }`, still images, `{ \"image\", \"duration\", \"motion\", \"transition\" }`, or title cards, `{ \"color\", \"duration\", \"text\", \"transition\" }`. Not with `input`.","minItems":1,"maxItems":16,"type":"array","items":{"anyOf":[{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"start":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"end":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"text":{"minItems":1,"maxItems":4,"type":"array","items":{"$ref":"#/components/schemas/TextLayer"},"description":"Up to 4 text layers, drawn after overlays in order."},"transition":{"$ref":"#/components/schemas/Transition"}},"required":["input"],"additionalProperties":false},{"type":"object","properties":{"image":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"The input whose first picture this part shows: an image, or a video's first frame."},"duration":{"type":"number","minimum":0.1,"maximum":300,"description":"Seconds it stays on screen, 0.1 to 300."},"motion":{"description":"A slow zoom or pan across the picture, which then always fills the frame (Ken Burns).","type":"string","enum":["zoom-in","zoom-out","pan-left","pan-right","pan-up","pan-down"]},"text":{"minItems":1,"maxItems":4,"type":"array","items":{"$ref":"#/components/schemas/TextLayer"},"description":"Up to 4 text layers, drawn after overlays in order."},"transition":{"$ref":"#/components/schemas/Transition"}},"required":["image","duration"],"additionalProperties":false},{"type":"object","properties":{"color":{"anyOf":[{"type":"string","enum":["black","white"]},{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}],"description":"The colour of the card: `black`, `white` or `#RRGGBB`."},"duration":{"type":"number","minimum":0.1,"maximum":300,"description":"Seconds it stays on screen, 0.1 to 300."},"text":{"minItems":1,"maxItems":4,"type":"array","items":{"$ref":"#/components/schemas/TextLayer"},"description":"Up to 4 text layers, drawn after overlays in order."},"transition":{"$ref":"#/components/schemas/Transition"}},"required":["color","duration"],"additionalProperties":false}]}},"trim":{"description":"The part of the input to use: `start`, and `end` or `duration`.","type":"object","properties":{"start":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"end":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"duration":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90}},"additionalProperties":false},"crop":{"description":"A rectangle of the input frame, in input pixels.","type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":7680},"y":{"type":"integer","minimum":0,"maximum":7680},"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680}},"required":["x","y","width","height"],"additionalProperties":false},"rotate":{"description":"Degrees clockwise.","anyOf":[{"type":"number","const":90},{"type":"number","const":180},{"type":"number","const":270}]},"flip":{"description":"Mirror the picture.","type":"string","enum":["horizontal","vertical"]},"resize":{"description":"A new size: `width`, `height`, `aspect`, and how the picture fits (`fit`).","type":"object","properties":{"width":{"type":"integer","minimum":16,"maximum":7680,"multipleOf":2},"height":{"type":"integer","minimum":16,"maximum":7680,"multipleOf":2},"aspect":{"type":"string","enum":["16:9","9:16","1:1","4:5","4:3","3:4"]},"fit":{"type":"string","enum":["contain","cover","pad"]},"anchor":{"type":"string","enum":["center","top","bottom","left","right"]},"pad_color":{"anyOf":[{"type":"string","enum":["black","white"]},{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}],"description":"`black`, `white` or `#RRGGBB`."},"enlarge":{"description":"Scale a smaller input up to the size (default true); false keeps it at its size, never larger.","type":"boolean"}},"additionalProperties":false},"color":{"description":"Brightness, contrast, saturation, gamma and hue.","type":"object","properties":{"brightness":{"type":"number","minimum":-1,"maximum":1},"contrast":{"type":"number","minimum":0,"maximum":3},"saturation":{"type":"number","minimum":0,"maximum":3},"gamma":{"type":"number","minimum":0.1,"maximum":10},"hue":{"type":"number","minimum":-180,"maximum":180}},"additionalProperties":false},"sharpen":{"description":"An unsharp mask.","type":"object","properties":{"amount":{"type":"number","minimum":0,"maximum":3},"size":{"anyOf":[{"type":"number","const":3},{"type":"number","const":5},{"type":"number","const":7}]}},"additionalProperties":false},"blur":{"description":"A box blur of the whole frame, or of up to 4 regions.","type":"object","properties":{"strength":{"type":"integer","minimum":1,"maximum":50},"regions":{"minItems":1,"maxItems":4,"type":"array","items":{"type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":7680},"y":{"type":"integer","minimum":0,"maximum":7680},"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680}},"required":["x","y","width","height"],"additionalProperties":false}}},"required":["strength"],"additionalProperties":false},"overlays":{"description":"Images or videos drawn over the picture, in order.","minItems":1,"maxItems":4,"type":"array","items":{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"position":{"type":"string","enum":["top-left","top","top-right","left","center","right","bottom-left","bottom","bottom-right"]},"margin":{"type":"integer","minimum":0,"maximum":1000},"width":{"type":"integer","minimum":8,"maximum":7680},"opacity":{"type":"number","minimum":0,"maximum":1},"start":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"end":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90}},"required":["input"],"additionalProperties":false}},"text":{"minItems":1,"maxItems":8,"type":"array","items":{"$ref":"#/components/schemas/TextLayer"},"description":"Up to 8 text layers, drawn after overlays in order."},"subtitles":{"$ref":"#/components/schemas/Subtitles"},"speed":{"description":"How fast it plays, 0.25 to 4; the sound keeps its pitch.","type":"number","minimum":0.25,"maximum":4},"fps":{"description":"A constant frame rate.","type":"number","minimum":1,"maximum":120},"fade":{"description":"Fade in at the start and out at the end; `out` needs `trim.duration` or `trim.end`.","type":"object","properties":{"in":{"type":"number","minimum":0.1,"maximum":60},"out":{"type":"number","minimum":0.1,"maximum":60},"color":{"type":"string","enum":["black","white"]}},"additionalProperties":false},"video":{"description":"The video encoder: codec, quality or CRF, preset, maximum bitrate, pixel format.","type":"object","properties":{"codec":{"type":"string","enum":["h264","h265","vp9","av1","copy"]},"quality":{"type":"string","enum":["low","medium","high","lossless"]},"crf":{"type":"integer","minimum":0,"maximum":63},"encoder_preset":{"type":"string","enum":["ultrafast","superfast","veryfast","faster","fast","medium","slow"]},"max_bitrate":{"type":"string","pattern":"^(\\d{1,6})(?:\\.(\\d{1,3}))?([kM])$"},"pixel_format":{"type":"string","enum":["yuv420p","yuv422p","yuv444p","yuv420p10le"]},"faststart":{"type":"boolean"}},"additionalProperties":false},"audio":{"description":"`false` for no sound, or the audio encoder and filters.","anyOf":[{"type":"boolean","const":false},{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"codec":{"type":"string","enum":["aac","mp3","opus","vorbis","flac","alac","pcm","copy"]},"quality":{"type":"string","enum":["low","medium","high"]},"bitrate":{"type":"string","pattern":"^(\\d{1,6})(?:\\.(\\d{1,3}))?([kM])$"},"sample_rate":{"type":"integer","minimum":8000,"maximum":192000},"channels":{"anyOf":[{"type":"number","const":1},{"type":"number","const":2}]},"volume":{"type":"number","minimum":0,"maximum":4},"normalize":{"anyOf":[{"type":"boolean","const":true},{"type":"object","properties":{"loudness":{"type":"number","minimum":-70,"maximum":-5},"true_peak":{"type":"number","minimum":-9,"maximum":0},"range":{"type":"number","minimum":1,"maximum":20}},"additionalProperties":false}]},"mix":{"minItems":1,"maxItems":4,"type":"array","items":{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"volume":{"type":"number","minimum":0,"maximum":4}},"required":["input"],"additionalProperties":false}}},"additionalProperties":false}]},"visualize":{"description":"A waveform or spectrum video drawn from the input's sound.","type":"object","properties":{"style":{"type":"string","enum":["waveform","spectrum"]},"width":{"type":"integer","minimum":16,"maximum":7680,"multipleOf":2},"height":{"type":"integer","minimum":16,"maximum":7680,"multipleOf":2},"fps":{"type":"integer","minimum":1,"maximum":60}},"required":["style"],"additionalProperties":false},"strip_metadata":{"description":"Drop the input's global and stream metadata (GPS, device tags).","type":"boolean"},"preset":{"description":"A video preset (`GET /v1/presets`); its options are the defaults and the output's own fields win.","type":"string","enum":["web-720p","web-1080p","social-vertical","square"]},"type":{"type":"string","const":"video"}},"required":["type"],"additionalProperties":false,"description":"A video output: the fields a video output takes."},"AudioOutput":{"type":"object","properties":{"name":{"description":"Required when the job has several outputs; `main` when it has one. The alias is `out_<name>`.","type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$"},"filename":{"description":"The stored file name, `<name>.<format>` by default; one extension, matching `format`.","type":"string","minLength":1,"maxLength":105},"format":{"description":"The container or image format; from `filename`, or the type's default.","type":"string","enum":["mp4","mov","webm","mkv","ts","mp3","m4a","aac","wav","flac","ogg","opus","jpg","png","gif","json"]},"input":{"description":"The input it reads; required when the job has several, unless `concat` is set.","type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$"},"concat":{"description":"Parts played one after another: input names, `{ \"input\", \"start\", \"end\", \"transition\" }`, still images, `{ \"image\", \"duration\", \"motion\", \"transition\" }`, or title cards, `{ \"color\", \"duration\", \"text\", \"transition\" }`. Not with `input`.","minItems":1,"maxItems":16,"type":"array","items":{"anyOf":[{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"start":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"end":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"text":{"minItems":1,"maxItems":4,"type":"array","items":{"$ref":"#/components/schemas/TextLayer"},"description":"Up to 4 text layers, drawn after overlays in order."},"transition":{"$ref":"#/components/schemas/Transition"}},"required":["input"],"additionalProperties":false},{"type":"object","properties":{"image":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"The input whose first picture this part shows: an image, or a video's first frame."},"duration":{"type":"number","minimum":0.1,"maximum":300,"description":"Seconds it stays on screen, 0.1 to 300."},"motion":{"description":"A slow zoom or pan across the picture, which then always fills the frame (Ken Burns).","type":"string","enum":["zoom-in","zoom-out","pan-left","pan-right","pan-up","pan-down"]},"text":{"minItems":1,"maxItems":4,"type":"array","items":{"$ref":"#/components/schemas/TextLayer"},"description":"Up to 4 text layers, drawn after overlays in order."},"transition":{"$ref":"#/components/schemas/Transition"}},"required":["image","duration"],"additionalProperties":false},{"type":"object","properties":{"color":{"anyOf":[{"type":"string","enum":["black","white"]},{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}],"description":"The colour of the card: `black`, `white` or `#RRGGBB`."},"duration":{"type":"number","minimum":0.1,"maximum":300,"description":"Seconds it stays on screen, 0.1 to 300."},"text":{"minItems":1,"maxItems":4,"type":"array","items":{"$ref":"#/components/schemas/TextLayer"},"description":"Up to 4 text layers, drawn after overlays in order."},"transition":{"$ref":"#/components/schemas/Transition"}},"required":["color","duration"],"additionalProperties":false}]}},"trim":{"description":"The part of the input to use: `start`, and `end` or `duration`.","type":"object","properties":{"start":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"end":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"duration":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90}},"additionalProperties":false},"speed":{"description":"How fast it plays, 0.25 to 4; the sound keeps its pitch.","type":"number","minimum":0.25,"maximum":4},"fade":{"description":"Fade in at the start and out at the end; `out` needs `trim.duration` or `trim.end`.","type":"object","properties":{"in":{"type":"number","minimum":0.1,"maximum":60},"out":{"type":"number","minimum":0.1,"maximum":60},"color":{"type":"string","enum":["black","white"]}},"additionalProperties":false},"audio":{"description":"`false` for no sound, or the audio encoder and filters.","anyOf":[{"type":"boolean","const":false},{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"codec":{"type":"string","enum":["aac","mp3","opus","vorbis","flac","alac","pcm","copy"]},"quality":{"type":"string","enum":["low","medium","high"]},"bitrate":{"type":"string","pattern":"^(\\d{1,6})(?:\\.(\\d{1,3}))?([kM])$"},"sample_rate":{"type":"integer","minimum":8000,"maximum":192000},"channels":{"anyOf":[{"type":"number","const":1},{"type":"number","const":2}]},"volume":{"type":"number","minimum":0,"maximum":4},"normalize":{"anyOf":[{"type":"boolean","const":true},{"type":"object","properties":{"loudness":{"type":"number","minimum":-70,"maximum":-5},"true_peak":{"type":"number","minimum":-9,"maximum":0},"range":{"type":"number","minimum":1,"maximum":20}},"additionalProperties":false}]},"mix":{"minItems":1,"maxItems":4,"type":"array","items":{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"volume":{"type":"number","minimum":0,"maximum":4}},"required":["input"],"additionalProperties":false}}},"additionalProperties":false}]},"strip_metadata":{"description":"Drop the input's global and stream metadata (GPS, device tags).","type":"boolean"},"preset":{"description":"An audio preset (`GET /v1/presets`); its options are the defaults and the output's own fields win.","type":"string","enum":["podcast-audio"]},"type":{"type":"string","const":"audio"}},"required":["type"],"additionalProperties":false,"description":"An audio output: the fields an audio output takes."},"ImageOutput":{"type":"object","properties":{"name":{"description":"Required when the job has several outputs; `main` when it has one. The alias is `out_<name>`.","type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$"},"filename":{"description":"The stored file name, `<name>.<format>` by default; one extension, matching `format`.","type":"string","minLength":1,"maxLength":105},"format":{"description":"The container or image format; from `filename`, or the type's default.","type":"string","enum":["mp4","mov","webm","mkv","ts","mp3","m4a","aac","wav","flac","ogg","opus","jpg","png","gif","json"]},"input":{"description":"The input it reads; required when the job has several, unless `concat` is set.","type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$"},"crop":{"description":"A rectangle of the input frame, in input pixels.","type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":7680},"y":{"type":"integer","minimum":0,"maximum":7680},"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680}},"required":["x","y","width","height"],"additionalProperties":false},"rotate":{"description":"Degrees clockwise.","anyOf":[{"type":"number","const":90},{"type":"number","const":180},{"type":"number","const":270}]},"flip":{"description":"Mirror the picture.","type":"string","enum":["horizontal","vertical"]},"resize":{"description":"A new size: `width`, `height`, `aspect`, and how the picture fits (`fit`).","type":"object","properties":{"width":{"type":"integer","minimum":16,"maximum":7680,"multipleOf":2},"height":{"type":"integer","minimum":16,"maximum":7680,"multipleOf":2},"aspect":{"type":"string","enum":["16:9","9:16","1:1","4:5","4:3","3:4"]},"fit":{"type":"string","enum":["contain","cover","pad"]},"anchor":{"type":"string","enum":["center","top","bottom","left","right"]},"pad_color":{"anyOf":[{"type":"string","enum":["black","white"]},{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}],"description":"`black`, `white` or `#RRGGBB`."},"enlarge":{"description":"Scale a smaller input up to the size (default true); false keeps it at its size, never larger.","type":"boolean"}},"additionalProperties":false},"color":{"description":"Brightness, contrast, saturation, gamma and hue.","type":"object","properties":{"brightness":{"type":"number","minimum":-1,"maximum":1},"contrast":{"type":"number","minimum":0,"maximum":3},"saturation":{"type":"number","minimum":0,"maximum":3},"gamma":{"type":"number","minimum":0.1,"maximum":10},"hue":{"type":"number","minimum":-180,"maximum":180}},"additionalProperties":false},"sharpen":{"description":"An unsharp mask.","type":"object","properties":{"amount":{"type":"number","minimum":0,"maximum":3},"size":{"anyOf":[{"type":"number","const":3},{"type":"number","const":5},{"type":"number","const":7}]}},"additionalProperties":false},"blur":{"description":"A box blur of the whole frame, or of up to 4 regions.","type":"object","properties":{"strength":{"type":"integer","minimum":1,"maximum":50},"regions":{"minItems":1,"maxItems":4,"type":"array","items":{"type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":7680},"y":{"type":"integer","minimum":0,"maximum":7680},"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680}},"required":["x","y","width","height"],"additionalProperties":false}}},"required":["strength"],"additionalProperties":false},"overlays":{"description":"Images or videos drawn over the picture, in order.","minItems":1,"maxItems":4,"type":"array","items":{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"position":{"type":"string","enum":["top-left","top","top-right","left","center","right","bottom-left","bottom","bottom-right"]},"margin":{"type":"integer","minimum":0,"maximum":1000},"width":{"type":"integer","minimum":8,"maximum":7680},"opacity":{"type":"number","minimum":0,"maximum":1},"start":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"end":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90}},"required":["input"],"additionalProperties":false}},"text":{"minItems":1,"maxItems":8,"type":"array","items":{"$ref":"#/components/schemas/TextLayer"},"description":"Up to 8 text layers, drawn after overlays in order."},"at":{"description":"The frame time, or `\"auto\"` for the most representative of the first 300 frames.","anyOf":[{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},{"type":"string","const":"auto"}]},"times":{"description":"One image per time, `<name>_1`, `<name>_2`, ...; not with `at`.","minItems":1,"maxItems":16,"type":"array","items":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90}},"quality":{"description":"JPEG quality; PNG ignores it.","type":"string","enum":["low","medium","high"]},"strip_metadata":{"description":"Drop the input's global and stream metadata (GPS, device tags).","type":"boolean"},"preset":{"description":"An image preset (`GET /v1/presets`); its options are the defaults and the output's own fields win.","type":"string","enum":["poster"]},"type":{"type":"string","const":"image"}},"required":["type"],"additionalProperties":false,"description":"An image output: the fields an image output takes."},"StoryboardOutput":{"type":"object","properties":{"name":{"description":"Required when the job has several outputs; `main` when it has one. The alias is `out_<name>`.","type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$"},"filename":{"description":"The stored file name, `<name>.<format>` by default; one extension, matching `format`.","type":"string","minLength":1,"maxLength":105},"format":{"description":"The container or image format; from `filename`, or the type's default.","type":"string","enum":["mp4","mov","webm","mkv","ts","mp3","m4a","aac","wav","flac","ogg","opus","jpg","png","gif","json"]},"input":{"description":"The input it reads; required when the job has several, unless `concat` is set.","type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$"},"trim":{"description":"The part of the input to use: `start`, and `end` or `duration`.","type":"object","properties":{"start":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"end":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"duration":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90}},"additionalProperties":false},"crop":{"description":"A rectangle of the input frame, in input pixels.","type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":7680},"y":{"type":"integer","minimum":0,"maximum":7680},"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680}},"required":["x","y","width","height"],"additionalProperties":false},"rotate":{"description":"Degrees clockwise.","anyOf":[{"type":"number","const":90},{"type":"number","const":180},{"type":"number","const":270}]},"flip":{"description":"Mirror the picture.","type":"string","enum":["horizontal","vertical"]},"color":{"description":"Brightness, contrast, saturation, gamma and hue.","type":"object","properties":{"brightness":{"type":"number","minimum":-1,"maximum":1},"contrast":{"type":"number","minimum":0,"maximum":3},"saturation":{"type":"number","minimum":0,"maximum":3},"gamma":{"type":"number","minimum":0.1,"maximum":10},"hue":{"type":"number","minimum":-180,"maximum":180}},"additionalProperties":false},"interval":{"description":"Seconds between frames.","type":"number","minimum":0.5,"maximum":3600},"columns":{"description":"Frames across.","type":"integer","minimum":1,"maximum":16},"rows":{"description":"Frames down.","type":"integer","minimum":1,"maximum":16},"tile_width":{"description":"Each frame fits in a square of this many pixels.","type":"integer","minimum":16,"maximum":640},"quality":{"description":"JPEG quality; PNG ignores it.","type":"string","enum":["low","medium","high"]},"exact_times":{"description":"Decode every frame for exact tile times, instead of key frames only.","type":"boolean"},"strip_metadata":{"description":"Drop the input's global and stream metadata (GPS, device tags).","type":"boolean"},"type":{"type":"string","const":"storyboard"}},"required":["type"],"additionalProperties":false,"description":"A storyboard output: the fields a storyboard output takes."},"GifOutput":{"type":"object","properties":{"name":{"description":"Required when the job has several outputs; `main` when it has one. The alias is `out_<name>`.","type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$"},"filename":{"description":"The stored file name, `<name>.<format>` by default; one extension, matching `format`.","type":"string","minLength":1,"maxLength":105},"format":{"description":"The container or image format; from `filename`, or the type's default.","type":"string","enum":["mp4","mov","webm","mkv","ts","mp3","m4a","aac","wav","flac","ogg","opus","jpg","png","gif","json"]},"input":{"description":"The input it reads; required when the job has several, unless `concat` is set.","type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$"},"trim":{"description":"The part of the input to use: `start`, and `end` or `duration`.","type":"object","properties":{"start":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"end":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"duration":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90}},"additionalProperties":false},"crop":{"description":"A rectangle of the input frame, in input pixels.","type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":7680},"y":{"type":"integer","minimum":0,"maximum":7680},"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680}},"required":["x","y","width","height"],"additionalProperties":false},"rotate":{"description":"Degrees clockwise.","anyOf":[{"type":"number","const":90},{"type":"number","const":180},{"type":"number","const":270}]},"flip":{"description":"Mirror the picture.","type":"string","enum":["horizontal","vertical"]},"resize":{"description":"A new size: `width`, `height`, `aspect`, and how the picture fits (`fit`).","type":"object","properties":{"width":{"type":"integer","minimum":16,"maximum":7680,"multipleOf":2},"height":{"type":"integer","minimum":16,"maximum":7680,"multipleOf":2},"aspect":{"type":"string","enum":["16:9","9:16","1:1","4:5","4:3","3:4"]},"fit":{"type":"string","enum":["contain","cover","pad"]},"anchor":{"type":"string","enum":["center","top","bottom","left","right"]},"pad_color":{"anyOf":[{"type":"string","enum":["black","white"]},{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}],"description":"`black`, `white` or `#RRGGBB`."},"enlarge":{"description":"Scale a smaller input up to the size (default true); false keeps it at its size, never larger.","type":"boolean"}},"additionalProperties":false},"color":{"description":"Brightness, contrast, saturation, gamma and hue.","type":"object","properties":{"brightness":{"type":"number","minimum":-1,"maximum":1},"contrast":{"type":"number","minimum":0,"maximum":3},"saturation":{"type":"number","minimum":0,"maximum":3},"gamma":{"type":"number","minimum":0.1,"maximum":10},"hue":{"type":"number","minimum":-180,"maximum":180}},"additionalProperties":false},"sharpen":{"description":"An unsharp mask.","type":"object","properties":{"amount":{"type":"number","minimum":0,"maximum":3},"size":{"anyOf":[{"type":"number","const":3},{"type":"number","const":5},{"type":"number","const":7}]}},"additionalProperties":false},"blur":{"description":"A box blur of the whole frame, or of up to 4 regions.","type":"object","properties":{"strength":{"type":"integer","minimum":1,"maximum":50},"regions":{"minItems":1,"maxItems":4,"type":"array","items":{"type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":7680},"y":{"type":"integer","minimum":0,"maximum":7680},"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680}},"required":["x","y","width","height"],"additionalProperties":false}}},"required":["strength"],"additionalProperties":false},"overlays":{"description":"Images or videos drawn over the picture, in order.","minItems":1,"maxItems":4,"type":"array","items":{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"position":{"type":"string","enum":["top-left","top","top-right","left","center","right","bottom-left","bottom","bottom-right"]},"margin":{"type":"integer","minimum":0,"maximum":1000},"width":{"type":"integer","minimum":8,"maximum":7680},"opacity":{"type":"number","minimum":0,"maximum":1},"start":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"end":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90}},"required":["input"],"additionalProperties":false}},"text":{"minItems":1,"maxItems":8,"type":"array","items":{"$ref":"#/components/schemas/TextLayer"},"description":"Up to 8 text layers, drawn after overlays in order."},"speed":{"description":"How fast it plays, 0.25 to 4; the sound keeps its pitch.","type":"number","minimum":0.25,"maximum":4},"fps":{"description":"A constant frame rate.","type":"number","minimum":1,"maximum":120},"fade":{"description":"Fade in at the start and out at the end; `out` needs `trim.duration` or `trim.end`.","type":"object","properties":{"in":{"type":"number","minimum":0.1,"maximum":60},"out":{"type":"number","minimum":0.1,"maximum":60},"color":{"type":"string","enum":["black","white"]}},"additionalProperties":false},"colors":{"description":"Colours in the palette.","type":"integer","minimum":2,"maximum":256},"strip_metadata":{"description":"Drop the input's global and stream metadata (GPS, device tags).","type":"boolean"},"preset":{"description":"A gif preset (`GET /v1/presets`); its options are the defaults and the output's own fields win.","type":"string","enum":["gif-preview"]},"type":{"type":"string","const":"gif"}},"required":["type"],"additionalProperties":false,"description":"A gif output: the fields a gif output takes."},"MetadataOutput":{"type":"object","properties":{"name":{"description":"Required when the job has several outputs; `main` when it has one. The alias is `out_<name>`.","type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$"},"filename":{"description":"The stored file name, `<name>.<format>` by default; one extension, matching `format`.","type":"string","minLength":1,"maxLength":105},"format":{"description":"`json`, the only format.","type":"string","const":"json"},"input":{"description":"The input it reads; required when the job has several, unless `concat` is set.","type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$"},"type":{"type":"string","const":"metadata"}},"required":["type"],"additionalProperties":false,"description":"A metadata output: the fields a metadata output takes."},"ScenesOutput":{"type":"object","properties":{"name":{"description":"Required when the job has several outputs; `main` when it has one. The alias is `out_<name>`.","type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$"},"filename":{"description":"The stored file name, `<name>.<format>` by default; one extension, matching `format`.","type":"string","minLength":1,"maxLength":105},"format":{"description":"`json`, the only format.","type":"string","const":"json"},"input":{"description":"The input it reads; required when the job has several, unless `concat` is set.","type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$"},"trim":{"description":"The part of the input to use: `start`, and `end` or `duration`.","type":"object","properties":{"start":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"end":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"duration":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90}},"additionalProperties":false},"threshold":{"description":"The score, 1 to 100, at which a frame starts a new scene (default 10, scdet's).","type":"number","minimum":1,"maximum":100},"type":{"type":"string","const":"scenes"}},"required":["type"],"additionalProperties":false,"description":"A scenes output: the fields a scenes output takes."},"PresetVideoOutput":{"type":"object","properties":{"name":{"description":"Required when the job has several outputs; `main` when it has one. The alias is `out_<name>`.","type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$"},"filename":{"description":"The stored file name, `<name>.<format>` by default; one extension, matching `format`.","type":"string","minLength":1,"maxLength":105},"format":{"description":"The container or image format; from `filename`, or the type's default.","type":"string","enum":["mp4","mov","webm","mkv","ts","mp3","m4a","aac","wav","flac","ogg","opus","jpg","png","gif","json"]},"input":{"description":"The input it reads; required when the job has several, unless `concat` is set.","type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$"},"concat":{"description":"Parts played one after another: input names, `{ \"input\", \"start\", \"end\", \"transition\" }`, still images, `{ \"image\", \"duration\", \"motion\", \"transition\" }`, or title cards, `{ \"color\", \"duration\", \"text\", \"transition\" }`. Not with `input`.","minItems":1,"maxItems":16,"type":"array","items":{"anyOf":[{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"start":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"end":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"text":{"minItems":1,"maxItems":4,"type":"array","items":{"$ref":"#/components/schemas/TextLayer"},"description":"Up to 4 text layers, drawn after overlays in order."},"transition":{"$ref":"#/components/schemas/Transition"}},"required":["input"],"additionalProperties":false},{"type":"object","properties":{"image":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"The input whose first picture this part shows: an image, or a video's first frame."},"duration":{"type":"number","minimum":0.1,"maximum":300,"description":"Seconds it stays on screen, 0.1 to 300."},"motion":{"description":"A slow zoom or pan across the picture, which then always fills the frame (Ken Burns).","type":"string","enum":["zoom-in","zoom-out","pan-left","pan-right","pan-up","pan-down"]},"text":{"minItems":1,"maxItems":4,"type":"array","items":{"$ref":"#/components/schemas/TextLayer"},"description":"Up to 4 text layers, drawn after overlays in order."},"transition":{"$ref":"#/components/schemas/Transition"}},"required":["image","duration"],"additionalProperties":false},{"type":"object","properties":{"color":{"anyOf":[{"type":"string","enum":["black","white"]},{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}],"description":"The colour of the card: `black`, `white` or `#RRGGBB`."},"duration":{"type":"number","minimum":0.1,"maximum":300,"description":"Seconds it stays on screen, 0.1 to 300."},"text":{"minItems":1,"maxItems":4,"type":"array","items":{"$ref":"#/components/schemas/TextLayer"},"description":"Up to 4 text layers, drawn after overlays in order."},"transition":{"$ref":"#/components/schemas/Transition"}},"required":["color","duration"],"additionalProperties":false}]}},"trim":{"description":"The part of the input to use: `start`, and `end` or `duration`.","type":"object","properties":{"start":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"end":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"duration":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90}},"additionalProperties":false},"crop":{"description":"A rectangle of the input frame, in input pixels.","type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":7680},"y":{"type":"integer","minimum":0,"maximum":7680},"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680}},"required":["x","y","width","height"],"additionalProperties":false},"rotate":{"description":"Degrees clockwise.","anyOf":[{"type":"number","const":90},{"type":"number","const":180},{"type":"number","const":270}]},"flip":{"description":"Mirror the picture.","type":"string","enum":["horizontal","vertical"]},"resize":{"description":"A new size: `width`, `height`, `aspect`, and how the picture fits (`fit`).","type":"object","properties":{"width":{"type":"integer","minimum":16,"maximum":7680,"multipleOf":2},"height":{"type":"integer","minimum":16,"maximum":7680,"multipleOf":2},"aspect":{"type":"string","enum":["16:9","9:16","1:1","4:5","4:3","3:4"]},"fit":{"type":"string","enum":["contain","cover","pad"]},"anchor":{"type":"string","enum":["center","top","bottom","left","right"]},"pad_color":{"anyOf":[{"type":"string","enum":["black","white"]},{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}],"description":"`black`, `white` or `#RRGGBB`."},"enlarge":{"description":"Scale a smaller input up to the size (default true); false keeps it at its size, never larger.","type":"boolean"}},"additionalProperties":false},"color":{"description":"Brightness, contrast, saturation, gamma and hue.","type":"object","properties":{"brightness":{"type":"number","minimum":-1,"maximum":1},"contrast":{"type":"number","minimum":0,"maximum":3},"saturation":{"type":"number","minimum":0,"maximum":3},"gamma":{"type":"number","minimum":0.1,"maximum":10},"hue":{"type":"number","minimum":-180,"maximum":180}},"additionalProperties":false},"sharpen":{"description":"An unsharp mask.","type":"object","properties":{"amount":{"type":"number","minimum":0,"maximum":3},"size":{"anyOf":[{"type":"number","const":3},{"type":"number","const":5},{"type":"number","const":7}]}},"additionalProperties":false},"blur":{"description":"A box blur of the whole frame, or of up to 4 regions.","type":"object","properties":{"strength":{"type":"integer","minimum":1,"maximum":50},"regions":{"minItems":1,"maxItems":4,"type":"array","items":{"type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":7680},"y":{"type":"integer","minimum":0,"maximum":7680},"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680}},"required":["x","y","width","height"],"additionalProperties":false}}},"required":["strength"],"additionalProperties":false},"overlays":{"description":"Images or videos drawn over the picture, in order.","minItems":1,"maxItems":4,"type":"array","items":{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"position":{"type":"string","enum":["top-left","top","top-right","left","center","right","bottom-left","bottom","bottom-right"]},"margin":{"type":"integer","minimum":0,"maximum":1000},"width":{"type":"integer","minimum":8,"maximum":7680},"opacity":{"type":"number","minimum":0,"maximum":1},"start":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"end":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90}},"required":["input"],"additionalProperties":false}},"text":{"minItems":1,"maxItems":8,"type":"array","items":{"$ref":"#/components/schemas/TextLayer"},"description":"Up to 8 text layers, drawn after overlays in order."},"subtitles":{"$ref":"#/components/schemas/Subtitles"},"speed":{"description":"How fast it plays, 0.25 to 4; the sound keeps its pitch.","type":"number","minimum":0.25,"maximum":4},"fps":{"description":"A constant frame rate.","type":"number","minimum":1,"maximum":120},"fade":{"description":"Fade in at the start and out at the end; `out` needs `trim.duration` or `trim.end`.","type":"object","properties":{"in":{"type":"number","minimum":0.1,"maximum":60},"out":{"type":"number","minimum":0.1,"maximum":60},"color":{"type":"string","enum":["black","white"]}},"additionalProperties":false},"video":{"description":"The video encoder: codec, quality or CRF, preset, maximum bitrate, pixel format.","type":"object","properties":{"codec":{"type":"string","enum":["h264","h265","vp9","av1","copy"]},"quality":{"type":"string","enum":["low","medium","high","lossless"]},"crf":{"type":"integer","minimum":0,"maximum":63},"encoder_preset":{"type":"string","enum":["ultrafast","superfast","veryfast","faster","fast","medium","slow"]},"max_bitrate":{"type":"string","pattern":"^(\\d{1,6})(?:\\.(\\d{1,3}))?([kM])$"},"pixel_format":{"type":"string","enum":["yuv420p","yuv422p","yuv444p","yuv420p10le"]},"faststart":{"type":"boolean"}},"additionalProperties":false},"audio":{"description":"`false` for no sound, or the audio encoder and filters.","anyOf":[{"type":"boolean","const":false},{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"codec":{"type":"string","enum":["aac","mp3","opus","vorbis","flac","alac","pcm","copy"]},"quality":{"type":"string","enum":["low","medium","high"]},"bitrate":{"type":"string","pattern":"^(\\d{1,6})(?:\\.(\\d{1,3}))?([kM])$"},"sample_rate":{"type":"integer","minimum":8000,"maximum":192000},"channels":{"anyOf":[{"type":"number","const":1},{"type":"number","const":2}]},"volume":{"type":"number","minimum":0,"maximum":4},"normalize":{"anyOf":[{"type":"boolean","const":true},{"type":"object","properties":{"loudness":{"type":"number","minimum":-70,"maximum":-5},"true_peak":{"type":"number","minimum":-9,"maximum":0},"range":{"type":"number","minimum":1,"maximum":20}},"additionalProperties":false}]},"mix":{"minItems":1,"maxItems":4,"type":"array","items":{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"volume":{"type":"number","minimum":0,"maximum":4}},"required":["input"],"additionalProperties":false}}},"additionalProperties":false}]},"visualize":{"description":"A waveform or spectrum video drawn from the input's sound.","type":"object","properties":{"style":{"type":"string","enum":["waveform","spectrum"]},"width":{"type":"integer","minimum":16,"maximum":7680,"multipleOf":2},"height":{"type":"integer","minimum":16,"maximum":7680,"multipleOf":2},"fps":{"type":"integer","minimum":1,"maximum":60}},"required":["style"],"additionalProperties":false},"strip_metadata":{"description":"Drop the input's global and stream metadata (GPS, device tags).","type":"boolean"},"preset":{"type":"string","enum":["web-720p","web-1080p","social-vertical","square"],"description":"A video preset (`GET /v1/presets`); its options are the defaults and the output's own fields win."}},"required":["preset"],"additionalProperties":false,"description":"An output named by a video preset, without `type`: the fields a video output takes."},"PresetAudioOutput":{"type":"object","properties":{"name":{"description":"Required when the job has several outputs; `main` when it has one. The alias is `out_<name>`.","type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$"},"filename":{"description":"The stored file name, `<name>.<format>` by default; one extension, matching `format`.","type":"string","minLength":1,"maxLength":105},"format":{"description":"The container or image format; from `filename`, or the type's default.","type":"string","enum":["mp4","mov","webm","mkv","ts","mp3","m4a","aac","wav","flac","ogg","opus","jpg","png","gif","json"]},"input":{"description":"The input it reads; required when the job has several, unless `concat` is set.","type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$"},"concat":{"description":"Parts played one after another: input names, `{ \"input\", \"start\", \"end\", \"transition\" }`, still images, `{ \"image\", \"duration\", \"motion\", \"transition\" }`, or title cards, `{ \"color\", \"duration\", \"text\", \"transition\" }`. Not with `input`.","minItems":1,"maxItems":16,"type":"array","items":{"anyOf":[{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"start":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"end":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"text":{"minItems":1,"maxItems":4,"type":"array","items":{"$ref":"#/components/schemas/TextLayer"},"description":"Up to 4 text layers, drawn after overlays in order."},"transition":{"$ref":"#/components/schemas/Transition"}},"required":["input"],"additionalProperties":false},{"type":"object","properties":{"image":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"The input whose first picture this part shows: an image, or a video's first frame."},"duration":{"type":"number","minimum":0.1,"maximum":300,"description":"Seconds it stays on screen, 0.1 to 300."},"motion":{"description":"A slow zoom or pan across the picture, which then always fills the frame (Ken Burns).","type":"string","enum":["zoom-in","zoom-out","pan-left","pan-right","pan-up","pan-down"]},"text":{"minItems":1,"maxItems":4,"type":"array","items":{"$ref":"#/components/schemas/TextLayer"},"description":"Up to 4 text layers, drawn after overlays in order."},"transition":{"$ref":"#/components/schemas/Transition"}},"required":["image","duration"],"additionalProperties":false},{"type":"object","properties":{"color":{"anyOf":[{"type":"string","enum":["black","white"]},{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}],"description":"The colour of the card: `black`, `white` or `#RRGGBB`."},"duration":{"type":"number","minimum":0.1,"maximum":300,"description":"Seconds it stays on screen, 0.1 to 300."},"text":{"minItems":1,"maxItems":4,"type":"array","items":{"$ref":"#/components/schemas/TextLayer"},"description":"Up to 4 text layers, drawn after overlays in order."},"transition":{"$ref":"#/components/schemas/Transition"}},"required":["color","duration"],"additionalProperties":false}]}},"trim":{"description":"The part of the input to use: `start`, and `end` or `duration`.","type":"object","properties":{"start":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"end":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"duration":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90}},"additionalProperties":false},"speed":{"description":"How fast it plays, 0.25 to 4; the sound keeps its pitch.","type":"number","minimum":0.25,"maximum":4},"fade":{"description":"Fade in at the start and out at the end; `out` needs `trim.duration` or `trim.end`.","type":"object","properties":{"in":{"type":"number","minimum":0.1,"maximum":60},"out":{"type":"number","minimum":0.1,"maximum":60},"color":{"type":"string","enum":["black","white"]}},"additionalProperties":false},"audio":{"description":"`false` for no sound, or the audio encoder and filters.","anyOf":[{"type":"boolean","const":false},{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"codec":{"type":"string","enum":["aac","mp3","opus","vorbis","flac","alac","pcm","copy"]},"quality":{"type":"string","enum":["low","medium","high"]},"bitrate":{"type":"string","pattern":"^(\\d{1,6})(?:\\.(\\d{1,3}))?([kM])$"},"sample_rate":{"type":"integer","minimum":8000,"maximum":192000},"channels":{"anyOf":[{"type":"number","const":1},{"type":"number","const":2}]},"volume":{"type":"number","minimum":0,"maximum":4},"normalize":{"anyOf":[{"type":"boolean","const":true},{"type":"object","properties":{"loudness":{"type":"number","minimum":-70,"maximum":-5},"true_peak":{"type":"number","minimum":-9,"maximum":0},"range":{"type":"number","minimum":1,"maximum":20}},"additionalProperties":false}]},"mix":{"minItems":1,"maxItems":4,"type":"array","items":{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"volume":{"type":"number","minimum":0,"maximum":4}},"required":["input"],"additionalProperties":false}}},"additionalProperties":false}]},"strip_metadata":{"description":"Drop the input's global and stream metadata (GPS, device tags).","type":"boolean"},"preset":{"type":"string","enum":["podcast-audio"],"description":"An audio preset (`GET /v1/presets`); its options are the defaults and the output's own fields win."}},"required":["preset"],"additionalProperties":false,"description":"An output named by an audio preset, without `type`: the fields an audio output takes."},"PresetImageOutput":{"type":"object","properties":{"name":{"description":"Required when the job has several outputs; `main` when it has one. The alias is `out_<name>`.","type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$"},"filename":{"description":"The stored file name, `<name>.<format>` by default; one extension, matching `format`.","type":"string","minLength":1,"maxLength":105},"format":{"description":"The container or image format; from `filename`, or the type's default.","type":"string","enum":["mp4","mov","webm","mkv","ts","mp3","m4a","aac","wav","flac","ogg","opus","jpg","png","gif","json"]},"input":{"description":"The input it reads; required when the job has several, unless `concat` is set.","type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$"},"crop":{"description":"A rectangle of the input frame, in input pixels.","type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":7680},"y":{"type":"integer","minimum":0,"maximum":7680},"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680}},"required":["x","y","width","height"],"additionalProperties":false},"rotate":{"description":"Degrees clockwise.","anyOf":[{"type":"number","const":90},{"type":"number","const":180},{"type":"number","const":270}]},"flip":{"description":"Mirror the picture.","type":"string","enum":["horizontal","vertical"]},"resize":{"description":"A new size: `width`, `height`, `aspect`, and how the picture fits (`fit`).","type":"object","properties":{"width":{"type":"integer","minimum":16,"maximum":7680,"multipleOf":2},"height":{"type":"integer","minimum":16,"maximum":7680,"multipleOf":2},"aspect":{"type":"string","enum":["16:9","9:16","1:1","4:5","4:3","3:4"]},"fit":{"type":"string","enum":["contain","cover","pad"]},"anchor":{"type":"string","enum":["center","top","bottom","left","right"]},"pad_color":{"anyOf":[{"type":"string","enum":["black","white"]},{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}],"description":"`black`, `white` or `#RRGGBB`."},"enlarge":{"description":"Scale a smaller input up to the size (default true); false keeps it at its size, never larger.","type":"boolean"}},"additionalProperties":false},"color":{"description":"Brightness, contrast, saturation, gamma and hue.","type":"object","properties":{"brightness":{"type":"number","minimum":-1,"maximum":1},"contrast":{"type":"number","minimum":0,"maximum":3},"saturation":{"type":"number","minimum":0,"maximum":3},"gamma":{"type":"number","minimum":0.1,"maximum":10},"hue":{"type":"number","minimum":-180,"maximum":180}},"additionalProperties":false},"sharpen":{"description":"An unsharp mask.","type":"object","properties":{"amount":{"type":"number","minimum":0,"maximum":3},"size":{"anyOf":[{"type":"number","const":3},{"type":"number","const":5},{"type":"number","const":7}]}},"additionalProperties":false},"blur":{"description":"A box blur of the whole frame, or of up to 4 regions.","type":"object","properties":{"strength":{"type":"integer","minimum":1,"maximum":50},"regions":{"minItems":1,"maxItems":4,"type":"array","items":{"type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":7680},"y":{"type":"integer","minimum":0,"maximum":7680},"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680}},"required":["x","y","width","height"],"additionalProperties":false}}},"required":["strength"],"additionalProperties":false},"overlays":{"description":"Images or videos drawn over the picture, in order.","minItems":1,"maxItems":4,"type":"array","items":{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"position":{"type":"string","enum":["top-left","top","top-right","left","center","right","bottom-left","bottom","bottom-right"]},"margin":{"type":"integer","minimum":0,"maximum":1000},"width":{"type":"integer","minimum":8,"maximum":7680},"opacity":{"type":"number","minimum":0,"maximum":1},"start":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"end":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90}},"required":["input"],"additionalProperties":false}},"text":{"minItems":1,"maxItems":8,"type":"array","items":{"$ref":"#/components/schemas/TextLayer"},"description":"Up to 8 text layers, drawn after overlays in order."},"at":{"description":"The frame time, or `\"auto\"` for the most representative of the first 300 frames.","anyOf":[{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},{"type":"string","const":"auto"}]},"times":{"description":"One image per time, `<name>_1`, `<name>_2`, ...; not with `at`.","minItems":1,"maxItems":16,"type":"array","items":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90}},"quality":{"description":"JPEG quality; PNG ignores it.","type":"string","enum":["low","medium","high"]},"strip_metadata":{"description":"Drop the input's global and stream metadata (GPS, device tags).","type":"boolean"},"preset":{"type":"string","enum":["poster"],"description":"An image preset (`GET /v1/presets`); its options are the defaults and the output's own fields win."}},"required":["preset"],"additionalProperties":false,"description":"An output named by an image preset, without `type`: the fields an image output takes."},"PresetGifOutput":{"type":"object","properties":{"name":{"description":"Required when the job has several outputs; `main` when it has one. The alias is `out_<name>`.","type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$"},"filename":{"description":"The stored file name, `<name>.<format>` by default; one extension, matching `format`.","type":"string","minLength":1,"maxLength":105},"format":{"description":"The container or image format; from `filename`, or the type's default.","type":"string","enum":["mp4","mov","webm","mkv","ts","mp3","m4a","aac","wav","flac","ogg","opus","jpg","png","gif","json"]},"input":{"description":"The input it reads; required when the job has several, unless `concat` is set.","type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$"},"trim":{"description":"The part of the input to use: `start`, and `end` or `duration`.","type":"object","properties":{"start":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"end":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"duration":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90}},"additionalProperties":false},"crop":{"description":"A rectangle of the input frame, in input pixels.","type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":7680},"y":{"type":"integer","minimum":0,"maximum":7680},"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680}},"required":["x","y","width","height"],"additionalProperties":false},"rotate":{"description":"Degrees clockwise.","anyOf":[{"type":"number","const":90},{"type":"number","const":180},{"type":"number","const":270}]},"flip":{"description":"Mirror the picture.","type":"string","enum":["horizontal","vertical"]},"resize":{"description":"A new size: `width`, `height`, `aspect`, and how the picture fits (`fit`).","type":"object","properties":{"width":{"type":"integer","minimum":16,"maximum":7680,"multipleOf":2},"height":{"type":"integer","minimum":16,"maximum":7680,"multipleOf":2},"aspect":{"type":"string","enum":["16:9","9:16","1:1","4:5","4:3","3:4"]},"fit":{"type":"string","enum":["contain","cover","pad"]},"anchor":{"type":"string","enum":["center","top","bottom","left","right"]},"pad_color":{"anyOf":[{"type":"string","enum":["black","white"]},{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}],"description":"`black`, `white` or `#RRGGBB`."},"enlarge":{"description":"Scale a smaller input up to the size (default true); false keeps it at its size, never larger.","type":"boolean"}},"additionalProperties":false},"color":{"description":"Brightness, contrast, saturation, gamma and hue.","type":"object","properties":{"brightness":{"type":"number","minimum":-1,"maximum":1},"contrast":{"type":"number","minimum":0,"maximum":3},"saturation":{"type":"number","minimum":0,"maximum":3},"gamma":{"type":"number","minimum":0.1,"maximum":10},"hue":{"type":"number","minimum":-180,"maximum":180}},"additionalProperties":false},"sharpen":{"description":"An unsharp mask.","type":"object","properties":{"amount":{"type":"number","minimum":0,"maximum":3},"size":{"anyOf":[{"type":"number","const":3},{"type":"number","const":5},{"type":"number","const":7}]}},"additionalProperties":false},"blur":{"description":"A box blur of the whole frame, or of up to 4 regions.","type":"object","properties":{"strength":{"type":"integer","minimum":1,"maximum":50},"regions":{"minItems":1,"maxItems":4,"type":"array","items":{"type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":7680},"y":{"type":"integer","minimum":0,"maximum":7680},"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680}},"required":["x","y","width","height"],"additionalProperties":false}}},"required":["strength"],"additionalProperties":false},"overlays":{"description":"Images or videos drawn over the picture, in order.","minItems":1,"maxItems":4,"type":"array","items":{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"position":{"type":"string","enum":["top-left","top","top-right","left","center","right","bottom-left","bottom","bottom-right"]},"margin":{"type":"integer","minimum":0,"maximum":1000},"width":{"type":"integer","minimum":8,"maximum":7680},"opacity":{"type":"number","minimum":0,"maximum":1},"start":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"end":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90}},"required":["input"],"additionalProperties":false}},"text":{"minItems":1,"maxItems":8,"type":"array","items":{"$ref":"#/components/schemas/TextLayer"},"description":"Up to 8 text layers, drawn after overlays in order."},"speed":{"description":"How fast it plays, 0.25 to 4; the sound keeps its pitch.","type":"number","minimum":0.25,"maximum":4},"fps":{"description":"A constant frame rate.","type":"number","minimum":1,"maximum":120},"fade":{"description":"Fade in at the start and out at the end; `out` needs `trim.duration` or `trim.end`.","type":"object","properties":{"in":{"type":"number","minimum":0.1,"maximum":60},"out":{"type":"number","minimum":0.1,"maximum":60},"color":{"type":"string","enum":["black","white"]}},"additionalProperties":false},"colors":{"description":"Colours in the palette.","type":"integer","minimum":2,"maximum":256},"strip_metadata":{"description":"Drop the input's global and stream metadata (GPS, device tags).","type":"boolean"},"preset":{"type":"string","enum":["gif-preview"],"description":"A gif preset (`GET /v1/presets`); its options are the defaults and the output's own fields win."}},"required":["preset"],"additionalProperties":false,"description":"An output named by a gif preset, without `type`: the fields a gif output takes."},"ConcatVideoRequest":{"anyOf":[{"type":"object","properties":{"inputs":{"minItems":2,"maxItems":16,"type":"array","items":{"anyOf":[{"anyOf":[{"type":"string"},{"type":"string","pattern":"^videxo:\\/\\/uploads\\/(up_[a-f0-9]{24})$"},{"type":"object","properties":{"url":{"type":"string"}},"required":["url"],"additionalProperties":false},{"type":"object","properties":{"upload_id":{"type":"string","pattern":"^up_[a-f0-9]{24}$"}},"required":["upload_id"],"additionalProperties":false}],"description":"An http or https URL, `videxo://uploads/<upload_id>`, `{ \"url\" }` or `{ \"upload_id\" }`."},{"type":"object","properties":{"source":{"anyOf":[{"type":"string"},{"type":"string","pattern":"^videxo:\\/\\/uploads\\/(up_[a-f0-9]{24})$"},{"type":"object","properties":{"url":{"type":"string"}},"required":["url"],"additionalProperties":false},{"type":"object","properties":{"upload_id":{"type":"string","pattern":"^up_[a-f0-9]{24}$"}},"required":["upload_id"],"additionalProperties":false}],"description":"An http or https URL, `videxo://uploads/<upload_id>`, `{ \"url\" }` or `{ \"upload_id\" }`."},"start":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"end":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"text":{"minItems":1,"maxItems":4,"type":"array","items":{"$ref":"#/components/schemas/TextLayer"},"description":"Up to 4 text layers, drawn after overlays in order."},"transition":{"$ref":"#/components/schemas/Transition"}},"required":["source"],"additionalProperties":false}]}},"extra_inputs":{"type":"object","propertyNames":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"additionalProperties":{"anyOf":[{"type":"string"},{"type":"string","pattern":"^videxo:\\/\\/uploads\\/(up_[a-f0-9]{24})$"},{"type":"object","properties":{"url":{"type":"string"}},"required":["url"],"additionalProperties":false},{"type":"object","properties":{"upload_id":{"type":"string","pattern":"^up_[a-f0-9]{24}$"}},"required":["upload_id"],"additionalProperties":false}],"description":"An http or https URL, `videxo://uploads/<upload_id>`, `{ \"url\" }` or `{ \"upload_id\" }`."}},"webhook_url":{"description":"An https URL that gets the job when it ends (M4).","anyOf":[{"type":"string","maxLength":2048,"format":"uri"},{"type":"null"}]},"metadata":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":40},"additionalProperties":{"type":"string","maxLength":500},"description":"Your own string pairs, returned with the job and its webhook: at most 20 keys of up to 40 characters, values up to 500.","example":{"order":"1234"}},"filename":{"description":"The stored file name, `<name>.<format>` by default; one extension, matching `format`.","type":"string","minLength":1,"maxLength":105},"format":{"description":"The container or image format; from `filename`, or the type's default.","type":"string","enum":["mp4","mov","webm","mkv","ts","mp3","m4a","aac","wav","flac","ogg","opus","jpg","png","gif","json"]},"trim":{"description":"The part of the input to use: `start`, and `end` or `duration`.","type":"object","properties":{"start":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"end":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"duration":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90}},"additionalProperties":false},"crop":{"description":"A rectangle of the input frame, in input pixels.","type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":7680},"y":{"type":"integer","minimum":0,"maximum":7680},"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680}},"required":["x","y","width","height"],"additionalProperties":false},"rotate":{"description":"Degrees clockwise.","anyOf":[{"type":"number","const":90},{"type":"number","const":180},{"type":"number","const":270}]},"flip":{"description":"Mirror the picture.","type":"string","enum":["horizontal","vertical"]},"resize":{"anyOf":[{"type":"object","properties":{"width":{"type":"integer","minimum":16,"maximum":7680,"multipleOf":2},"height":{"type":"integer","minimum":16,"maximum":7680,"multipleOf":2},"fit":{"type":"string","enum":["contain","cover","pad"]},"anchor":{"type":"string","enum":["center","top","bottom","left","right"]},"pad_color":{"anyOf":[{"type":"string","enum":["black","white"]},{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}],"description":"`black`, `white` or `#RRGGBB`."},"enlarge":{"description":"Scale a smaller input up to the size (default true); false keeps it at its size, never larger.","type":"boolean"}},"required":["width","height"],"additionalProperties":false},{"type":"object","properties":{"width":{"type":"integer","minimum":16,"maximum":7680,"multipleOf":2},"aspect":{"type":"string","enum":["16:9","9:16","1:1","4:5","4:3","3:4"]},"fit":{"type":"string","enum":["contain","cover","pad"]},"anchor":{"type":"string","enum":["center","top","bottom","left","right"]},"pad_color":{"anyOf":[{"type":"string","enum":["black","white"]},{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}],"description":"`black`, `white` or `#RRGGBB`."},"enlarge":{"description":"Scale a smaller input up to the size (default true); false keeps it at its size, never larger.","type":"boolean"}},"required":["width","aspect"],"additionalProperties":false},{"type":"object","properties":{"height":{"type":"integer","minimum":16,"maximum":7680,"multipleOf":2},"aspect":{"type":"string","enum":["16:9","9:16","1:1","4:5","4:3","3:4"]},"fit":{"type":"string","enum":["contain","cover","pad"]},"anchor":{"type":"string","enum":["center","top","bottom","left","right"]},"pad_color":{"anyOf":[{"type":"string","enum":["black","white"]},{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}],"description":"`black`, `white` or `#RRGGBB`."},"enlarge":{"description":"Scale a smaller input up to the size (default true); false keeps it at its size, never larger.","type":"boolean"}},"required":["height","aspect"],"additionalProperties":false}],"description":"A box: `width` and `height`, or one of them and `aspect`; every part is fitted into it."},"color":{"description":"Brightness, contrast, saturation, gamma and hue.","type":"object","properties":{"brightness":{"type":"number","minimum":-1,"maximum":1},"contrast":{"type":"number","minimum":0,"maximum":3},"saturation":{"type":"number","minimum":0,"maximum":3},"gamma":{"type":"number","minimum":0.1,"maximum":10},"hue":{"type":"number","minimum":-180,"maximum":180}},"additionalProperties":false},"sharpen":{"description":"An unsharp mask.","type":"object","properties":{"amount":{"type":"number","minimum":0,"maximum":3},"size":{"anyOf":[{"type":"number","const":3},{"type":"number","const":5},{"type":"number","const":7}]}},"additionalProperties":false},"blur":{"description":"A box blur of the whole frame, or of up to 4 regions.","type":"object","properties":{"strength":{"type":"integer","minimum":1,"maximum":50},"regions":{"minItems":1,"maxItems":4,"type":"array","items":{"type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":7680},"y":{"type":"integer","minimum":0,"maximum":7680},"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680}},"required":["x","y","width","height"],"additionalProperties":false}}},"required":["strength"],"additionalProperties":false},"overlays":{"description":"Images or videos drawn over the picture, in order.","minItems":1,"maxItems":4,"type":"array","items":{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"position":{"type":"string","enum":["top-left","top","top-right","left","center","right","bottom-left","bottom","bottom-right"]},"margin":{"type":"integer","minimum":0,"maximum":1000},"width":{"type":"integer","minimum":8,"maximum":7680},"opacity":{"type":"number","minimum":0,"maximum":1},"start":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"end":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90}},"required":["input"],"additionalProperties":false}},"text":{"minItems":1,"maxItems":8,"type":"array","items":{"$ref":"#/components/schemas/TextLayer"},"description":"Up to 8 text layers, drawn after overlays in order."},"subtitles":{"$ref":"#/components/schemas/Subtitles"},"speed":{"description":"How fast it plays, 0.25 to 4; the sound keeps its pitch.","type":"number","minimum":0.25,"maximum":4},"fps":{"description":"A constant frame rate.","type":"number","minimum":1,"maximum":120},"fade":{"description":"Fade in at the start and out at the end; `out` needs `trim.duration` or `trim.end`.","type":"object","properties":{"in":{"type":"number","minimum":0.1,"maximum":60},"out":{"type":"number","minimum":0.1,"maximum":60},"color":{"type":"string","enum":["black","white"]}},"additionalProperties":false},"video":{"description":"The video encoder: codec, quality or CRF, preset, maximum bitrate, pixel format.","type":"object","properties":{"codec":{"type":"string","enum":["h264","h265","vp9","av1","copy"]},"quality":{"type":"string","enum":["low","medium","high","lossless"]},"crf":{"type":"integer","minimum":0,"maximum":63},"encoder_preset":{"type":"string","enum":["ultrafast","superfast","veryfast","faster","fast","medium","slow"]},"max_bitrate":{"type":"string","pattern":"^(\\d{1,6})(?:\\.(\\d{1,3}))?([kM])$"},"pixel_format":{"type":"string","enum":["yuv420p","yuv422p","yuv444p","yuv420p10le"]},"faststart":{"type":"boolean"}},"additionalProperties":false},"audio":{"description":"`false` for no sound, or the audio encoder and filters.","anyOf":[{"type":"boolean","const":false},{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"codec":{"type":"string","enum":["aac","mp3","opus","vorbis","flac","alac","pcm","copy"]},"quality":{"type":"string","enum":["low","medium","high"]},"bitrate":{"type":"string","pattern":"^(\\d{1,6})(?:\\.(\\d{1,3}))?([kM])$"},"sample_rate":{"type":"integer","minimum":8000,"maximum":192000},"channels":{"anyOf":[{"type":"number","const":1},{"type":"number","const":2}]},"volume":{"type":"number","minimum":0,"maximum":4},"normalize":{"anyOf":[{"type":"boolean","const":true},{"type":"object","properties":{"loudness":{"type":"number","minimum":-70,"maximum":-5},"true_peak":{"type":"number","minimum":-9,"maximum":0},"range":{"type":"number","minimum":1,"maximum":20}},"additionalProperties":false}]},"mix":{"minItems":1,"maxItems":4,"type":"array","items":{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"volume":{"type":"number","minimum":0,"maximum":4}},"required":["input"],"additionalProperties":false}}},"additionalProperties":false}]},"visualize":{"description":"A waveform or spectrum video drawn from the input's sound.","type":"object","properties":{"style":{"type":"string","enum":["waveform","spectrum"]},"width":{"type":"integer","minimum":16,"maximum":7680,"multipleOf":2},"height":{"type":"integer","minimum":16,"maximum":7680,"multipleOf":2},"fps":{"type":"integer","minimum":1,"maximum":60}},"required":["style"],"additionalProperties":false},"strip_metadata":{"description":"Drop the input's global and stream metadata (GPS, device tags).","type":"boolean"},"preset":{"description":"A video preset (`GET /v1/presets`); its options are the defaults and the output's own fields win.","type":"string","enum":["web-720p","web-1080p","social-vertical","square"]},"type":{"description":"`video` by default.","type":"string","const":"video"}},"required":["inputs","resize"],"additionalProperties":false},{"type":"object","properties":{"inputs":{"minItems":2,"maxItems":16,"type":"array","items":{"anyOf":[{"anyOf":[{"type":"string"},{"type":"string","pattern":"^videxo:\\/\\/uploads\\/(up_[a-f0-9]{24})$"},{"type":"object","properties":{"url":{"type":"string"}},"required":["url"],"additionalProperties":false},{"type":"object","properties":{"upload_id":{"type":"string","pattern":"^up_[a-f0-9]{24}$"}},"required":["upload_id"],"additionalProperties":false}],"description":"An http or https URL, `videxo://uploads/<upload_id>`, `{ \"url\" }` or `{ \"upload_id\" }`."},{"type":"object","properties":{"source":{"anyOf":[{"type":"string"},{"type":"string","pattern":"^videxo:\\/\\/uploads\\/(up_[a-f0-9]{24})$"},{"type":"object","properties":{"url":{"type":"string"}},"required":["url"],"additionalProperties":false},{"type":"object","properties":{"upload_id":{"type":"string","pattern":"^up_[a-f0-9]{24}$"}},"required":["upload_id"],"additionalProperties":false}],"description":"An http or https URL, `videxo://uploads/<upload_id>`, `{ \"url\" }` or `{ \"upload_id\" }`."},"start":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"end":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"text":{"minItems":1,"maxItems":4,"type":"array","items":{"$ref":"#/components/schemas/TextLayer"},"description":"Up to 4 text layers, drawn after overlays in order."},"transition":{"$ref":"#/components/schemas/Transition"}},"required":["source"],"additionalProperties":false}]}},"extra_inputs":{"type":"object","propertyNames":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"additionalProperties":{"anyOf":[{"type":"string"},{"type":"string","pattern":"^videxo:\\/\\/uploads\\/(up_[a-f0-9]{24})$"},{"type":"object","properties":{"url":{"type":"string"}},"required":["url"],"additionalProperties":false},{"type":"object","properties":{"upload_id":{"type":"string","pattern":"^up_[a-f0-9]{24}$"}},"required":["upload_id"],"additionalProperties":false}],"description":"An http or https URL, `videxo://uploads/<upload_id>`, `{ \"url\" }` or `{ \"upload_id\" }`."}},"webhook_url":{"description":"An https URL that gets the job when it ends (M4).","anyOf":[{"type":"string","maxLength":2048,"format":"uri"},{"type":"null"}]},"metadata":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":40},"additionalProperties":{"type":"string","maxLength":500},"description":"Your own string pairs, returned with the job and its webhook: at most 20 keys of up to 40 characters, values up to 500.","example":{"order":"1234"}},"filename":{"description":"The stored file name, `<name>.<format>` by default; one extension, matching `format`.","type":"string","minLength":1,"maxLength":105},"format":{"description":"The container or image format; from `filename`, or the type's default.","type":"string","enum":["mp4","mov","webm","mkv","ts","mp3","m4a","aac","wav","flac","ogg","opus","jpg","png","gif","json"]},"trim":{"description":"The part of the input to use: `start`, and `end` or `duration`.","type":"object","properties":{"start":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"end":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"duration":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90}},"additionalProperties":false},"crop":{"description":"A rectangle of the input frame, in input pixels.","type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":7680},"y":{"type":"integer","minimum":0,"maximum":7680},"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680}},"required":["x","y","width","height"],"additionalProperties":false},"rotate":{"description":"Degrees clockwise.","anyOf":[{"type":"number","const":90},{"type":"number","const":180},{"type":"number","const":270}]},"flip":{"description":"Mirror the picture.","type":"string","enum":["horizontal","vertical"]},"resize":{"type":"object","properties":{"fit":{"type":"string","enum":["contain","cover","pad"]},"anchor":{"type":"string","enum":["center","top","bottom","left","right"]},"pad_color":{"anyOf":[{"type":"string","enum":["black","white"]},{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}],"description":"`black`, `white` or `#RRGGBB`."},"enlarge":{"description":"Scale a smaller input up to the size (default true); false keeps it at its size, never larger.","type":"boolean"}},"additionalProperties":false},"color":{"description":"Brightness, contrast, saturation, gamma and hue.","type":"object","properties":{"brightness":{"type":"number","minimum":-1,"maximum":1},"contrast":{"type":"number","minimum":0,"maximum":3},"saturation":{"type":"number","minimum":0,"maximum":3},"gamma":{"type":"number","minimum":0.1,"maximum":10},"hue":{"type":"number","minimum":-180,"maximum":180}},"additionalProperties":false},"sharpen":{"description":"An unsharp mask.","type":"object","properties":{"amount":{"type":"number","minimum":0,"maximum":3},"size":{"anyOf":[{"type":"number","const":3},{"type":"number","const":5},{"type":"number","const":7}]}},"additionalProperties":false},"blur":{"description":"A box blur of the whole frame, or of up to 4 regions.","type":"object","properties":{"strength":{"type":"integer","minimum":1,"maximum":50},"regions":{"minItems":1,"maxItems":4,"type":"array","items":{"type":"object","properties":{"x":{"type":"integer","minimum":0,"maximum":7680},"y":{"type":"integer","minimum":0,"maximum":7680},"width":{"type":"integer","minimum":16,"maximum":7680},"height":{"type":"integer","minimum":16,"maximum":7680}},"required":["x","y","width","height"],"additionalProperties":false}}},"required":["strength"],"additionalProperties":false},"overlays":{"description":"Images or videos drawn over the picture, in order.","minItems":1,"maxItems":4,"type":"array","items":{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"position":{"type":"string","enum":["top-left","top","top-right","left","center","right","bottom-left","bottom","bottom-right"]},"margin":{"type":"integer","minimum":0,"maximum":1000},"width":{"type":"integer","minimum":8,"maximum":7680},"opacity":{"type":"number","minimum":0,"maximum":1},"start":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"end":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90}},"required":["input"],"additionalProperties":false}},"text":{"minItems":1,"maxItems":8,"type":"array","items":{"$ref":"#/components/schemas/TextLayer"},"description":"Up to 8 text layers, drawn after overlays in order."},"subtitles":{"$ref":"#/components/schemas/Subtitles"},"speed":{"description":"How fast it plays, 0.25 to 4; the sound keeps its pitch.","type":"number","minimum":0.25,"maximum":4},"fps":{"description":"A constant frame rate.","type":"number","minimum":1,"maximum":120},"fade":{"description":"Fade in at the start and out at the end; `out` needs `trim.duration` or `trim.end`.","type":"object","properties":{"in":{"type":"number","minimum":0.1,"maximum":60},"out":{"type":"number","minimum":0.1,"maximum":60},"color":{"type":"string","enum":["black","white"]}},"additionalProperties":false},"video":{"description":"The video encoder: codec, quality or CRF, preset, maximum bitrate, pixel format.","type":"object","properties":{"codec":{"type":"string","enum":["h264","h265","vp9","av1","copy"]},"quality":{"type":"string","enum":["low","medium","high","lossless"]},"crf":{"type":"integer","minimum":0,"maximum":63},"encoder_preset":{"type":"string","enum":["ultrafast","superfast","veryfast","faster","fast","medium","slow"]},"max_bitrate":{"type":"string","pattern":"^(\\d{1,6})(?:\\.(\\d{1,3}))?([kM])$"},"pixel_format":{"type":"string","enum":["yuv420p","yuv422p","yuv444p","yuv420p10le"]},"faststart":{"type":"boolean"}},"additionalProperties":false},"audio":{"description":"`false` for no sound, or the audio encoder and filters.","anyOf":[{"type":"boolean","const":false},{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"codec":{"type":"string","enum":["aac","mp3","opus","vorbis","flac","alac","pcm","copy"]},"quality":{"type":"string","enum":["low","medium","high"]},"bitrate":{"type":"string","pattern":"^(\\d{1,6})(?:\\.(\\d{1,3}))?([kM])$"},"sample_rate":{"type":"integer","minimum":8000,"maximum":192000},"channels":{"anyOf":[{"type":"number","const":1},{"type":"number","const":2}]},"volume":{"type":"number","minimum":0,"maximum":4},"normalize":{"anyOf":[{"type":"boolean","const":true},{"type":"object","properties":{"loudness":{"type":"number","minimum":-70,"maximum":-5},"true_peak":{"type":"number","minimum":-9,"maximum":0},"range":{"type":"number","minimum":1,"maximum":20}},"additionalProperties":false}]},"mix":{"minItems":1,"maxItems":4,"type":"array","items":{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"volume":{"type":"number","minimum":0,"maximum":4}},"required":["input"],"additionalProperties":false}}},"additionalProperties":false}]},"visualize":{"description":"A waveform or spectrum video drawn from the input's sound.","type":"object","properties":{"style":{"type":"string","enum":["waveform","spectrum"]},"width":{"type":"integer","minimum":16,"maximum":7680,"multipleOf":2},"height":{"type":"integer","minimum":16,"maximum":7680,"multipleOf":2},"fps":{"type":"integer","minimum":1,"maximum":60}},"required":["style"],"additionalProperties":false},"strip_metadata":{"description":"Drop the input's global and stream metadata (GPS, device tags).","type":"boolean"},"preset":{"type":"string","enum":["web-720p","web-1080p","social-vertical","square"],"description":"A video preset whose size is the frame every part is fitted into."},"type":{"description":"`video` by default.","type":"string","const":"video"}},"required":["inputs","preset"],"additionalProperties":false}],"description":"A video concatenation: every part fitted into a `resize` box."},"ConcatAudioRequest":{"type":"object","properties":{"inputs":{"minItems":2,"maxItems":16,"type":"array","items":{"anyOf":[{"anyOf":[{"type":"string"},{"type":"string","pattern":"^videxo:\\/\\/uploads\\/(up_[a-f0-9]{24})$"},{"type":"object","properties":{"url":{"type":"string"}},"required":["url"],"additionalProperties":false},{"type":"object","properties":{"upload_id":{"type":"string","pattern":"^up_[a-f0-9]{24}$"}},"required":["upload_id"],"additionalProperties":false}],"description":"An http or https URL, `videxo://uploads/<upload_id>`, `{ \"url\" }` or `{ \"upload_id\" }`."},{"type":"object","properties":{"source":{"anyOf":[{"type":"string"},{"type":"string","pattern":"^videxo:\\/\\/uploads\\/(up_[a-f0-9]{24})$"},{"type":"object","properties":{"url":{"type":"string"}},"required":["url"],"additionalProperties":false},{"type":"object","properties":{"upload_id":{"type":"string","pattern":"^up_[a-f0-9]{24}$"}},"required":["upload_id"],"additionalProperties":false}],"description":"An http or https URL, `videxo://uploads/<upload_id>`, `{ \"url\" }` or `{ \"upload_id\" }`."},"start":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"end":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"text":{"minItems":1,"maxItems":4,"type":"array","items":{"$ref":"#/components/schemas/TextLayer"},"description":"Up to 4 text layers, drawn after overlays in order."},"transition":{"$ref":"#/components/schemas/Transition"}},"required":["source"],"additionalProperties":false}]}},"extra_inputs":{"type":"object","propertyNames":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"additionalProperties":{"anyOf":[{"type":"string"},{"type":"string","pattern":"^videxo:\\/\\/uploads\\/(up_[a-f0-9]{24})$"},{"type":"object","properties":{"url":{"type":"string"}},"required":["url"],"additionalProperties":false},{"type":"object","properties":{"upload_id":{"type":"string","pattern":"^up_[a-f0-9]{24}$"}},"required":["upload_id"],"additionalProperties":false}],"description":"An http or https URL, `videxo://uploads/<upload_id>`, `{ \"url\" }` or `{ \"upload_id\" }`."}},"webhook_url":{"description":"An https URL that gets the job when it ends (M4).","anyOf":[{"type":"string","maxLength":2048,"format":"uri"},{"type":"null"}]},"metadata":{"type":"object","propertyNames":{"type":"string","minLength":1,"maxLength":40},"additionalProperties":{"type":"string","maxLength":500},"description":"Your own string pairs, returned with the job and its webhook: at most 20 keys of up to 40 characters, values up to 500.","example":{"order":"1234"}},"filename":{"description":"The stored file name, `<name>.<format>` by default; one extension, matching `format`.","type":"string","minLength":1,"maxLength":105},"format":{"description":"The container or image format; from `filename`, or the type's default.","type":"string","enum":["mp4","mov","webm","mkv","ts","mp3","m4a","aac","wav","flac","ogg","opus","jpg","png","gif","json"]},"trim":{"description":"The part of the input to use: `start`, and `end` or `duration`.","type":"object","properties":{"start":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"end":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90},"duration":{"anyOf":[{"type":"number","minimum":0,"maximum":86400},{"type":"string","pattern":"^\\d{1,2}:[0-5]\\d:[0-5]\\d(?:\\.\\d{1,3})?$"}],"description":"Seconds, or `HH:MM:SS(.fraction)`.","example":90}},"additionalProperties":false},"speed":{"description":"How fast it plays, 0.25 to 4; the sound keeps its pitch.","type":"number","minimum":0.25,"maximum":4},"fade":{"description":"Fade in at the start and out at the end; `out` needs `trim.duration` or `trim.end`.","type":"object","properties":{"in":{"type":"number","minimum":0.1,"maximum":60},"out":{"type":"number","minimum":0.1,"maximum":60},"color":{"type":"string","enum":["black","white"]}},"additionalProperties":false},"audio":{"description":"`false` for no sound, or the audio encoder and filters.","anyOf":[{"type":"boolean","const":false},{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"codec":{"type":"string","enum":["aac","mp3","opus","vorbis","flac","alac","pcm","copy"]},"quality":{"type":"string","enum":["low","medium","high"]},"bitrate":{"type":"string","pattern":"^(\\d{1,6})(?:\\.(\\d{1,3}))?([kM])$"},"sample_rate":{"type":"integer","minimum":8000,"maximum":192000},"channels":{"anyOf":[{"type":"number","const":1},{"type":"number","const":2}]},"volume":{"type":"number","minimum":0,"maximum":4},"normalize":{"anyOf":[{"type":"boolean","const":true},{"type":"object","properties":{"loudness":{"type":"number","minimum":-70,"maximum":-5},"true_peak":{"type":"number","minimum":-9,"maximum":0},"range":{"type":"number","minimum":1,"maximum":20}},"additionalProperties":false}]},"mix":{"minItems":1,"maxItems":4,"type":"array","items":{"type":"object","properties":{"input":{"type":"string","pattern":"^[a-z][a-z0-9_]{0,39}$","description":"A lowercase letter, then up to 39 lowercase letters, digits or underscores."},"volume":{"type":"number","minimum":0,"maximum":4}},"required":["input"],"additionalProperties":false}}},"additionalProperties":false}]},"strip_metadata":{"description":"Drop the input's global and stream metadata (GPS, device tags).","type":"boolean"},"preset":{"description":"An audio preset (`GET /v1/presets`); its options are the defaults and the output's own fields win.","type":"string","enum":["podcast-audio"]},"type":{"type":"string","const":"audio"}},"required":["inputs","type"],"additionalProperties":false,"description":"An audio concatenation (`\"type\": \"audio\"`): sound only."}},"parameters":{}},"paths":{"/v1/files/{id}/{alias}":{"get":{"tags":["Files"],"summary":"Download a signed output","security":[],"description":"Use the signed URL from a job response. No API key is required. Supports one byte range; links expire in at most one hour.","parameters":[{"schema":{"type":"string","pattern":"^job_[a-z0-9]{24}$","description":"`job_` and 24 lowercase letters and digits.","example":"job_3k9x0c2mfq8w1n7r5t4b6v2z"},"required":true,"description":"`job_` and 24 lowercase letters and digits.","name":"id","in":"path"},{"schema":{"type":"string","pattern":"^out_[A-Za-z0-9_]{1,48}$"},"required":true,"name":"alias","in":"path"},{"schema":{"type":"string"},"required":true,"name":"account","in":"query"},{"schema":{"type":"string"},"required":true,"name":"expires","in":"query"},{"schema":{"type":"string"},"required":true,"name":"signature","in":"query"},{"schema":{"type":"string"},"required":false,"name":"range","in":"header"},{"schema":{"type":"string"},"required":false,"name":"if-range","in":"header"},{"schema":{"type":"string"},"required":false,"name":"if-none-match","in":"header"}],"responses":{"200":{"description":"The output bytes, as an attachment."},"206":{"description":"The requested byte range."},"304":{"description":"ETag has not changed."},"403":{"description":"permission_denied (link_invalid)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found (file)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"410":{"description":"resource_expired (link_expired, file_expired)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"416":{"description":"invalid_request (range_not_satisfiable)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"service_unavailable (temporary)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/uploads/{id}":{"put":{"tags":["Files"],"summary":"Send bytes to a one-time upload URL","security":[],"description":"Use upload_url from POST /v1/uploads. Send raw bytes, exactly size_bytes, up to 100 MB. The URL is consumed once streaming starts. No API key is required.","parameters":[{"schema":{"type":"string"},"required":true,"name":"id","in":"path"},{"schema":{"type":"string"},"required":true,"name":"account","in":"query"},{"schema":{"type":"string"},"required":true,"name":"expires","in":"query"},{"schema":{"type":"string"},"required":true,"name":"signature","in":"query"}],"requestBody":{"required":true,"content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"responses":{"200":{"description":"Upload completed: id, input_url, size_bytes, sha256, content_type, expires_at."},"400":{"description":"invalid_request (size_mismatch)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"authentication_failed (client_token_revoked): the client token that created the upload was revoked","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"permission_denied (link_invalid, account_disabled)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found (upload)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"conflict (upload_used)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"410":{"description":"resource_expired (link_expired, upload_expired)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"limit_exceeded (upload_size)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"service_unavailable (temporary)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/fonts":{"get":{"tags":["Operations"],"summary":"List fonts","description":"The fonts a text layer can name as `font`: each id with its family, weight, the scripts it covers and its licence. Public: needs no API key.","responses":{"200":{"description":"The fonts.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FontList"}}}}}}},"/v1/client/token":{"get":{"tags":["Client"],"summary":"What the client token may still do","description":"Its id, chain and expiry, the uploads its chain has created against its grant, and the jobs it may read.","security":[{"client_token":[]}],"responses":{"200":{"description":"The token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientTokenInfo"}}}},"401":{"description":"authentication_failed (missing_client_token, invalid_client_token, client_token_expired, client_token_superseded, client_token_revoked)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"permission_denied (client_token_required, token_scope, origin_not_allowed, account_disabled)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited, with Retry-After in seconds","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/client/uploads":{"post":{"tags":["Client"],"summary":"Create an upload with a client token","description":"The body and answer of `POST /v1/uploads`, within the token's upload grant, counted over its chain. An `Idempotency-Key` makes a retry answer the same upload (200) for 24 hours, after a refresh too.","security":[{"client_token":[]}],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":255,"pattern":"^[\\x21-\\x7e]+$"},"required":false,"name":"idempotency-key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateUploadRequest"}}}},"responses":{"200":{"description":"The upload this Idempotency-Key created earlier.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Upload"}}}},"201":{"description":"PUT the exact file bytes to upload_url, then hand input_url to your server for the job.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Upload"}}}},"400":{"description":"invalid_request: a field outside the grant (content_type, size_bytes)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"authentication_failed (missing_client_token, invalid_client_token, client_token_expired, client_token_superseded, client_token_revoked)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"permission_denied (client_token_required, token_scope, origin_not_allowed, account_disabled)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"conflict (idempotency_key_reused)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"limit_exceeded (token_uploads, upload_size, request_body_size)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited, with Retry-After in seconds","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/client/jobs/{id}":{"get":{"tags":["Client"],"summary":"Read a job the client token may read","description":"The job as an app sees it: state, progress, error and outputs with signed links. Any other job answers 404.","security":[{"client_token":[]}],"parameters":[{"schema":{"type":"string","maxLength":64,"description":"The job id.","example":"job_3k9x0c2mfq8w1n7r5t4b6v2z"},"required":true,"description":"The job id.","name":"id","in":"path"}],"responses":{"200":{"description":"The job.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientJob"}}}},"401":{"description":"authentication_failed (missing_client_token, invalid_client_token, client_token_expired, client_token_superseded, client_token_revoked)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"permission_denied (client_token_required, token_scope, origin_not_allowed, account_disabled)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found (job)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited, with Retry-After in seconds","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/client/jobs":{"get":{"tags":["Client"],"summary":"List the jobs the client token may read","description":"Newest first, at most 10, one page: a `cursor` answers 400.","security":[{"client_token":[]}],"responses":{"200":{"description":"The jobs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientJobList"}}}},"400":{"description":"invalid_request: a `cursor`","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"authentication_failed (missing_client_token, invalid_client_token, client_token_expired, client_token_superseded, client_token_revoked)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"permission_denied (client_token_required, token_scope, origin_not_allowed, account_disabled)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited, with Retry-After in seconds","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/me":{"get":{"tags":["Account"],"summary":"The account and key behind the API key","security":[{"bearer":[]}],"responses":{"200":{"description":"The account and key.","content":{"application/json":{"schema":{"type":"object","properties":{"account":{"type":"object","properties":{"id":{"type":"string"},"plan":{"type":"string","enum":["payg","starter","pro","scale"]}},"required":["id","plan"]},"key":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":["string","null"]}},"required":["id","name"]}},"required":["account","key"]}}}},"401":{"description":"authentication_failed (missing_api_key, invalid_api_key, api_key_revoked, api_key_expired)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"permission_denied (token_scope): a client token cannot call this route","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/credits":{"get":{"tags":["Account"],"summary":"The account's credits","description":"The balance as of the last change in the billing ledger, less the credits of jobs that ended since; the credits running jobs hold; the grants with credits left and when they expire; for a subscriber, the cycle and its overage.","security":[{"bearer":[]}],"responses":{"200":{"description":"The account's credits.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Credits"}}}},"401":{"description":"authentication_failed (missing_api_key, invalid_api_key, api_key_revoked, api_key_expired)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"permission_denied (token_scope): a client token cannot call this route","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/jobs/compile":{"post":{"tags":["Operations"],"summary":"Compile without running","description":"The spec, command body and `ffmpeg_command` a job would get, or the refusal creating it would get. No job is made and no credits are used; uploads are not looked up, so `ffmpeg_command` names an upload `./<input name>.upload`.","security":[{"bearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompileRequest"}}}},"responses":{"200":{"description":"What the job would run.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompileResult"}}}},"400":{"description":"invalid_request (with `errors`)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"authentication_failed (missing_api_key, invalid_api_key, api_key_revoked, api_key_expired)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"permission_denied (token_scope): a client token cannot call this route","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"limit_exceeded (request_body_size): the body is larger than 512 KB","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"invalid_request (not_json): the body is not sent as application/json","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited, with Retry-After in seconds","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"internal_error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/jobs":{"post":{"tags":["Jobs"],"summary":"Create a job","description":"Takes a command body (`command`, `input_files`, `output_files`) or an operations body (`inputs`, `outputs`), checks it and queues the job. With an `Idempotency-Key`, a retry with the same body within 24 hours answers 200 with the job it made, and a different body or endpoint answers 409.","security":[{"bearer":[]}],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":255,"pattern":"^[\\x21-\\x7e]+$","description":"Makes retries safe for 24 hours. Up to 255 printable ASCII characters. One key space per account across every endpoint that creates a job."},"required":false,"description":"Makes retries safe for 24 hours. Up to 255 printable ASCII characters. One key space per account across every endpoint that creates a job.","name":"idempotency-key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobRequest"}}}},"responses":{"200":{"description":"The job this Idempotency-Key made earlier (same endpoint and body).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"202":{"description":"The job, queued.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"400":{"description":"invalid_request (with `errors`) or command_invalid (with `problems`)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"authentication_failed (missing_api_key, invalid_api_key, api_key_revoked, api_key_expired)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"usage_cap_reached or out_of_credits","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"permission_denied (account_disabled, token_scope)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found (upload)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"conflict (idempotency_key_reused)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"limit_exceeded (request_body_size): the body is larger than 512 KB","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"invalid_request (not_json): the body is not sent as application/json","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited, with Retry-After in seconds","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"internal_error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"service_unavailable (temporary): the account's free credits are still being granted, or a part of the service did not answer","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"get":{"tags":["Jobs"],"summary":"List jobs","description":"The newest first, a page at a time: pass `next_cursor` as `cursor` for the next page, with the same filters. `created_after` is inclusive, `created_before` exclusive.","security":[{"bearer":[]}],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Jobs per page, 1 to 100."},"required":false,"description":"Jobs per page, 1 to 100.","name":"limit","in":"query"},{"schema":{"$ref":"#/components/schemas/JobState"},"required":false,"description":"queued and running are active; the others are final.","name":"state","in":"query"},{"schema":{"type":"string","maxLength":200,"description":"The `next_cursor` of the previous page."},"required":false,"description":"The `next_cursor` of the previous page.","name":"cursor","in":"query"},{"schema":{"type":"string","format":"date-time","description":"Only jobs created at or after this time, ISO 8601 UTC, such as `2026-11-04T00:00:00Z`."},"required":false,"description":"Only jobs created at or after this time, ISO 8601 UTC, such as `2026-11-04T00:00:00Z`.","name":"created_after","in":"query"},{"schema":{"type":"string","format":"date-time","description":"Only jobs created before this time, ISO 8601 UTC."},"required":false,"description":"Only jobs created before this time, ISO 8601 UTC.","name":"created_before","in":"query"}],"responses":{"200":{"description":"One page of jobs.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobList"}}}},"400":{"description":"invalid_request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"authentication_failed (missing_api_key, invalid_api_key, api_key_revoked, api_key_expired)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"permission_denied (token_scope): a client token cannot call this route","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited, with Retry-After in seconds","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/transcode":{"post":{"tags":["Operations"],"summary":"Transcode a video","description":"One video output from `input`: a preset or your own options (codec, quality, resize, trim, overlays, ...). Creates the same Job as `POST /v1/jobs`, with `operation` set.","security":[{"bearer":[]}],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":255,"pattern":"^[\\x21-\\x7e]+$","description":"Makes retries safe for 24 hours. Up to 255 printable ASCII characters. One key space per account across every endpoint that creates a job."},"required":false,"description":"Makes retries safe for 24 hours. Up to 255 printable ASCII characters. One key space per account across every endpoint that creates a job.","name":"idempotency-key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TranscodeRequest"}}}},"responses":{"200":{"description":"The job this Idempotency-Key made earlier (same endpoint and body).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"202":{"description":"The job, queued.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"400":{"description":"invalid_request (with `errors`) or command_invalid (with `problems`)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"authentication_failed (missing_api_key, invalid_api_key, api_key_revoked, api_key_expired)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"usage_cap_reached or out_of_credits","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"permission_denied (account_disabled, token_scope)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found (upload)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"conflict (idempotency_key_reused)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"limit_exceeded (request_body_size): the body is larger than 512 KB","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"invalid_request (not_json): the body is not sent as application/json","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited, with Retry-After in seconds","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"internal_error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"service_unavailable (temporary): the account's free credits are still being granted, or a part of the service did not answer","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/thumbnails":{"post":{"tags":["Operations"],"summary":"Grab thumbnails","description":"One image at `at` (or the most representative of the first frames), or one file per time in `times`. Creates the same Job as `POST /v1/jobs`, with `operation` set.","security":[{"bearer":[]}],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":255,"pattern":"^[\\x21-\\x7e]+$","description":"Makes retries safe for 24 hours. Up to 255 printable ASCII characters. One key space per account across every endpoint that creates a job."},"required":false,"description":"Makes retries safe for 24 hours. Up to 255 printable ASCII characters. One key space per account across every endpoint that creates a job.","name":"idempotency-key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ThumbnailsRequest"}}}},"responses":{"200":{"description":"The job this Idempotency-Key made earlier (same endpoint and body).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"202":{"description":"The job, queued.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"400":{"description":"invalid_request (with `errors`) or command_invalid (with `problems`)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"authentication_failed (missing_api_key, invalid_api_key, api_key_revoked, api_key_expired)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"usage_cap_reached or out_of_credits","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"permission_denied (account_disabled, token_scope)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found (upload)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"conflict (idempotency_key_reused)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"limit_exceeded (request_body_size): the body is larger than 512 KB","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"invalid_request (not_json): the body is not sent as application/json","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited, with Retry-After in seconds","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"internal_error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"service_unavailable (temporary): the account's free credits are still being granted, or a part of the service did not answer","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/storyboard":{"post":{"tags":["Operations"],"summary":"Make a storyboard","description":"Frames at a fixed `interval` laid out in a grid on one image. Creates the same Job as `POST /v1/jobs`, with `operation` set.","security":[{"bearer":[]}],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":255,"pattern":"^[\\x21-\\x7e]+$","description":"Makes retries safe for 24 hours. Up to 255 printable ASCII characters. One key space per account across every endpoint that creates a job."},"required":false,"description":"Makes retries safe for 24 hours. Up to 255 printable ASCII characters. One key space per account across every endpoint that creates a job.","name":"idempotency-key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StoryboardRequest"}}}},"responses":{"200":{"description":"The job this Idempotency-Key made earlier (same endpoint and body).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"202":{"description":"The job, queued.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"400":{"description":"invalid_request (with `errors`) or command_invalid (with `problems`)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"authentication_failed (missing_api_key, invalid_api_key, api_key_revoked, api_key_expired)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"usage_cap_reached or out_of_credits","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"permission_denied (account_disabled, token_scope)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found (upload)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"conflict (idempotency_key_reused)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"limit_exceeded (request_body_size): the body is larger than 512 KB","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"invalid_request (not_json): the body is not sent as application/json","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited, with Retry-After in seconds","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"internal_error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"service_unavailable (temporary): the account's free credits are still being granted, or a part of the service did not answer","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/gif":{"post":{"tags":["Operations"],"summary":"Make a GIF","description":"An animated GIF with its own palette; without an end it stops at 60 seconds. Creates the same Job as `POST /v1/jobs`, with `operation` set.","security":[{"bearer":[]}],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":255,"pattern":"^[\\x21-\\x7e]+$","description":"Makes retries safe for 24 hours. Up to 255 printable ASCII characters. One key space per account across every endpoint that creates a job."},"required":false,"description":"Makes retries safe for 24 hours. Up to 255 printable ASCII characters. One key space per account across every endpoint that creates a job.","name":"idempotency-key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GifRequest"}}}},"responses":{"200":{"description":"The job this Idempotency-Key made earlier (same endpoint and body).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"202":{"description":"The job, queued.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"400":{"description":"invalid_request (with `errors`) or command_invalid (with `problems`)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"authentication_failed (missing_api_key, invalid_api_key, api_key_revoked, api_key_expired)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"usage_cap_reached or out_of_credits","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"permission_denied (account_disabled, token_scope)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found (upload)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"conflict (idempotency_key_reused)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"limit_exceeded (request_body_size): the body is larger than 512 KB","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"invalid_request (not_json): the body is not sent as application/json","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited, with Retry-After in seconds","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"internal_error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"service_unavailable (temporary): the account's free credits are still being granted, or a part of the service did not answer","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/audio":{"post":{"tags":["Operations"],"summary":"Extract audio","description":"The sound of `input` as an audio file: codec, bitrate, loudness and more. Creates the same Job as `POST /v1/jobs`, with `operation` set.","security":[{"bearer":[]}],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":255,"pattern":"^[\\x21-\\x7e]+$","description":"Makes retries safe for 24 hours. Up to 255 printable ASCII characters. One key space per account across every endpoint that creates a job."},"required":false,"description":"Makes retries safe for 24 hours. Up to 255 printable ASCII characters. One key space per account across every endpoint that creates a job.","name":"idempotency-key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AudioRequest"}}}},"responses":{"200":{"description":"The job this Idempotency-Key made earlier (same endpoint and body).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"202":{"description":"The job, queued.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"400":{"description":"invalid_request (with `errors`) or command_invalid (with `problems`)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"authentication_failed (missing_api_key, invalid_api_key, api_key_revoked, api_key_expired)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"usage_cap_reached or out_of_credits","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"permission_denied (account_disabled, token_scope)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found (upload)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"conflict (idempotency_key_reused)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"limit_exceeded (request_body_size): the body is larger than 512 KB","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"invalid_request (not_json): the body is not sent as application/json","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited, with Retry-After in seconds","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"internal_error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"service_unavailable (temporary): the account's free credits are still being granted, or a part of the service did not answer","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/concat":{"post":{"tags":["Operations"],"summary":"Join files","description":"Plays the `inputs` one after another, each trimmed with `start` and `end` if you like, as one video or sound file. A part of a video may cross into the one before it with `transition`. Creates the same Job as `POST /v1/jobs`, with `operation` set.","security":[{"bearer":[]}],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":255,"pattern":"^[\\x21-\\x7e]+$","description":"Makes retries safe for 24 hours. Up to 255 printable ASCII characters. One key space per account across every endpoint that creates a job."},"required":false,"description":"Makes retries safe for 24 hours. Up to 255 printable ASCII characters. One key space per account across every endpoint that creates a job.","name":"idempotency-key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConcatRequest"}}}},"responses":{"200":{"description":"The job this Idempotency-Key made earlier (same endpoint and body).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"202":{"description":"The job, queued.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"400":{"description":"invalid_request (with `errors`) or command_invalid (with `problems`)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"authentication_failed (missing_api_key, invalid_api_key, api_key_revoked, api_key_expired)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"usage_cap_reached or out_of_credits","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"permission_denied (account_disabled, token_scope)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found (upload)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"conflict (idempotency_key_reused)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"limit_exceeded (request_body_size): the body is larger than 512 KB","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"invalid_request (not_json): the body is not sent as application/json","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited, with Retry-After in seconds","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"internal_error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"service_unavailable (temporary): the account's free credits are still being granted, or a part of the service did not answer","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/slideshow":{"post":{"tags":["Operations"],"summary":"Make a slideshow","description":"A video from the still `images`, each held for its `duration` with an optional slow zoom or pan (`motion`); one image is an image to video. `transition` crosses each image into the next. It has no sound unless `audio.input` names one of `extra_inputs`. Creates the same Job as `POST /v1/jobs`, with `operation` set.","security":[{"bearer":[]}],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":255,"pattern":"^[\\x21-\\x7e]+$","description":"Makes retries safe for 24 hours. Up to 255 printable ASCII characters. One key space per account across every endpoint that creates a job."},"required":false,"description":"Makes retries safe for 24 hours. Up to 255 printable ASCII characters. One key space per account across every endpoint that creates a job.","name":"idempotency-key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SlideshowRequest"}}}},"responses":{"200":{"description":"The job this Idempotency-Key made earlier (same endpoint and body).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"202":{"description":"The job, queued.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"400":{"description":"invalid_request (with `errors`) or command_invalid (with `problems`)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"authentication_failed (missing_api_key, invalid_api_key, api_key_revoked, api_key_expired)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"usage_cap_reached or out_of_credits","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"permission_denied (account_disabled, token_scope)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found (upload)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"conflict (idempotency_key_reused)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"limit_exceeded (request_body_size): the body is larger than 512 KB","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"invalid_request (not_json): the body is not sent as application/json","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited, with Retry-After in seconds","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"internal_error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"service_unavailable (temporary): the account's free credits are still being granted, or a part of the service did not answer","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/scenes":{"post":{"tags":["Operations"],"summary":"Detect scenes","description":"A JSON file listing the scenes of `input`, each with its start, end and the score of the change that starts it. Creates the same Job as `POST /v1/jobs`, with `operation` set.","security":[{"bearer":[]}],"parameters":[{"schema":{"type":"string","minLength":1,"maxLength":255,"pattern":"^[\\x21-\\x7e]+$","description":"Makes retries safe for 24 hours. Up to 255 printable ASCII characters. One key space per account across every endpoint that creates a job."},"required":false,"description":"Makes retries safe for 24 hours. Up to 255 printable ASCII characters. One key space per account across every endpoint that creates a job.","name":"idempotency-key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScenesRequest"}}}},"responses":{"200":{"description":"The job this Idempotency-Key made earlier (same endpoint and body).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"202":{"description":"The job, queued.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"400":{"description":"invalid_request (with `errors`) or command_invalid (with `problems`)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"authentication_failed (missing_api_key, invalid_api_key, api_key_revoked, api_key_expired)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"usage_cap_reached or out_of_credits","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"permission_denied (account_disabled, token_scope)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found (upload)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"conflict (idempotency_key_reused)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"limit_exceeded (request_body_size): the body is larger than 512 KB","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"invalid_request (not_json): the body is not sent as application/json","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited, with Retry-After in seconds","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"internal_error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"service_unavailable (temporary): the account's free credits are still being granted, or a part of the service did not answer","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/probe":{"post":{"tags":["Operations"],"summary":"Read media metadata","description":"The container, duration and streams of `input`, read with ffprobe: nothing is encoded. Waits up to 25 seconds for the job to end, or not at all with `?wait=false`. A job that has ended answers 200, with the document in `probe` when it succeeded; a job still queued or running answers 202 and `probe` is null. The document is also the job's output file. Creates the same Job as `POST /v1/jobs`, with `operation` set.","security":[{"bearer":[]}],"parameters":[{"schema":{"type":"string","enum":["true","false"],"description":"Wait up to 25 seconds for the job to end (`true`, the default), or answer at once (`false`)."},"required":false,"description":"Wait up to 25 seconds for the job to end (`true`, the default), or answer at once (`false`).","name":"wait","in":"query"},{"schema":{"type":"string","minLength":1,"maxLength":255,"pattern":"^[\\x21-\\x7e]+$","description":"Makes retries safe for 24 hours. Up to 255 printable ASCII characters. One key space per account across every endpoint that creates a job."},"required":false,"description":"Makes retries safe for 24 hours. Up to 255 printable ASCII characters. One key space per account across every endpoint that creates a job.","name":"idempotency-key","in":"header"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProbeRequest"}}}},"responses":{"200":{"description":"The job ended within the wait, or this Idempotency-Key made it earlier (same endpoint and body).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProbeResponse"}}}},"202":{"description":"The job, still queued or running; `probe` is null.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProbeResponse"}}}},"400":{"description":"invalid_request (with `errors`) or command_invalid (with `problems`)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"authentication_failed (missing_api_key, invalid_api_key, api_key_revoked, api_key_expired)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"402":{"description":"usage_cap_reached or out_of_credits","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"permission_denied (account_disabled, token_scope)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found (upload)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"conflict (idempotency_key_reused)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"limit_exceeded (request_body_size): the body is larger than 512 KB","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"415":{"description":"invalid_request (not_json): the body is not sent as application/json","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited, with Retry-After in seconds","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"internal_error","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"service_unavailable (temporary): the account's free credits are still being granted, or a part of the service did not answer","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/presets":{"get":{"tags":["Operations"],"summary":"List presets","description":"Every preset with its type, its full options as an output object and whether it is deprecated. During the preview, preset options may change; the API changelog lists every change.","security":[{"bearer":[]}],"responses":{"200":{"description":"The presets.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PresetList"}}}},"401":{"description":"authentication_failed (missing_api_key, invalid_api_key, api_key_revoked, api_key_expired)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"permission_denied (token_scope): a client token cannot call this route","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited, with Retry-After in seconds","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/jobs/{id}":{"get":{"tags":["Jobs"],"summary":"Get a job","security":[{"bearer":[]}],"parameters":[{"schema":{"type":"string","maxLength":64,"description":"The job id.","example":"job_3k9x0c2mfq8w1n7r5t4b6v2z"},"required":true,"description":"The job id.","name":"id","in":"path"}],"responses":{"200":{"description":"The job.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"401":{"description":"authentication_failed (missing_api_key, invalid_api_key, api_key_revoked, api_key_expired)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"permission_denied (token_scope): a client token cannot call this route","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found (job)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited, with Retry-After in seconds","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/jobs/{id}/cancel":{"post":{"tags":["Jobs"],"summary":"Cancel a job","description":"A queued or running job becomes cancelled. A job that already ended is answered as it is.","security":[{"bearer":[]}],"parameters":[{"schema":{"type":"string","maxLength":64,"description":"The job id.","example":"job_3k9x0c2mfq8w1n7r5t4b6v2z"},"required":true,"description":"The job id.","name":"id","in":"path"}],"responses":{"200":{"description":"The job, cancelled or as it ended.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"401":{"description":"authentication_failed (missing_api_key, invalid_api_key, api_key_revoked, api_key_expired)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"permission_denied (token_scope): a client token cannot call this route","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found (job)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited, with Retry-After in seconds","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"service_unavailable (cancel_unconfirmed): cancellation could not be confirmed; read the job before trying again","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/jobs/{id}/files":{"delete":{"tags":["Jobs"],"summary":"Delete a job's files","description":"Deletes the job's stored outputs now instead of at the end of their retention.","security":[{"bearer":[]}],"parameters":[{"schema":{"type":"string","maxLength":64,"description":"The job id.","example":"job_3k9x0c2mfq8w1n7r5t4b6v2z"},"required":true,"description":"The job id.","name":"id","in":"path"}],"responses":{"200":{"description":"The job, its outputs marked deleted.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Job"}}}},"401":{"description":"authentication_failed (missing_api_key, invalid_api_key, api_key_revoked, api_key_expired)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"permission_denied (token_scope): a client token cannot call this route","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found (job)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"conflict (job_active)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited, with Retry-After in seconds","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/uploads":{"post":{"tags":["Files"],"summary":"Create a one-time direct upload","security":[{"bearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateUploadRequest"}}}},"responses":{"201":{"description":"PUT the exact file bytes to upload_url, then use input_url in a job.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Upload"}}}},"400":{"description":"invalid_request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"authentication_failed (missing_api_key, invalid_api_key, api_key_revoked, api_key_expired)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"permission_denied (token_scope): a client token cannot call this route","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"limit_exceeded (upload_size, request_body_size)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/jobs/{id}/outputs/{alias}":{"get":{"tags":["Files"],"summary":"Get a fresh signed download URL","security":[{"bearer":[]}],"parameters":[{"schema":{"type":"string","pattern":"^job_[a-z0-9]{24}$","description":"`job_` and 24 lowercase letters and digits.","example":"job_3k9x0c2mfq8w1n7r5t4b6v2z"},"required":true,"description":"`job_` and 24 lowercase letters and digits.","name":"id","in":"path"},{"schema":{"type":"string","pattern":"^out_[A-Za-z0-9_]{1,48}$"},"required":true,"name":"alias","in":"path"}],"responses":{"302":{"description":"Redirect to the signed download URL.","headers":{"Location":{"schema":{"type":"string"}}}},"400":{"description":"invalid_request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"authentication_failed (missing_api_key, invalid_api_key, api_key_revoked, api_key_expired)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"permission_denied (token_scope): a client token cannot call this route","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found (job, output, file)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"410":{"description":"resource_expired (file_expired)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/webhook-secret":{"get":{"tags":["Webhooks"],"summary":"Get the signing secret","description":"The account's webhook signing secret, created on the first read. Every delivery, to the default endpoint and to a job's `webhook_url`, is signed with it.","security":[{"bearer":[]}],"responses":{"200":{"description":"The signing secret.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookSecret"}}}},"401":{"description":"authentication_failed (missing_api_key, invalid_api_key, api_key_revoked, api_key_expired)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"permission_denied (token_scope): a client token cannot call this route","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited, with Retry-After in seconds","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/webhook-secret/rotate":{"post":{"tags":["Webhooks"],"summary":"Rotate the signing secret","description":"Makes a new signing secret. For 24 hours deliveries carry a second signature made with the previous one.","security":[{"bearer":[]}],"responses":{"200":{"description":"The new signing secret.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookSecret"}}}},"401":{"description":"authentication_failed (missing_api_key, invalid_api_key, api_key_revoked, api_key_expired)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"permission_denied (token_scope): a client token cannot call this route","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited, with Retry-After in seconds","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/webhook-endpoints":{"get":{"tags":["Webhooks"],"summary":"List webhook endpoints","description":"The default endpoint, when the account has one.","security":[{"bearer":[]}],"responses":{"200":{"description":"The endpoints.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpointList"}}}},"401":{"description":"authentication_failed (missing_api_key, invalid_api_key, api_key_revoked, api_key_expired)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"permission_denied (token_scope): a client token cannot call this route","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited, with Retry-After in seconds","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"post":{"tags":["Webhooks"],"summary":"Create the webhook endpoint","description":"Every job of the account sends its end here while the endpoint is enabled. An account has one endpoint.","security":[{"bearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateWebhookEndpointRequest"}}}},"responses":{"201":{"description":"The endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpoint"}}}},"400":{"description":"invalid_request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"authentication_failed (missing_api_key, invalid_api_key, api_key_revoked, api_key_expired)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"permission_denied (token_scope): a client token cannot call this route","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"conflict (webhook_endpoint_exists)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited, with Retry-After in seconds","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/webhook-endpoints/{id}":{"get":{"tags":["Webhooks"],"summary":"Get a webhook endpoint","security":[{"bearer":[]}],"parameters":[{"schema":{"type":"string","maxLength":64,"description":"The endpoint id.","example":"we_4n8c2kq0x7m1v5z3b9r6t0wa"},"required":true,"description":"The endpoint id.","name":"id","in":"path"}],"responses":{"200":{"description":"The endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpoint"}}}},"401":{"description":"authentication_failed (missing_api_key, invalid_api_key, api_key_revoked, api_key_expired)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"permission_denied (token_scope): a client token cannot call this route","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found (webhook_endpoint)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited, with Retry-After in seconds","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"patch":{"tags":["Webhooks"],"summary":"Update a webhook endpoint","description":"Changes the URL, enables or disables the endpoint. Deliveries still pending go to the new URL.","security":[{"bearer":[]}],"parameters":[{"schema":{"type":"string","maxLength":64,"description":"The endpoint id.","example":"we_4n8c2kq0x7m1v5z3b9r6t0wa"},"required":true,"description":"The endpoint id.","name":"id","in":"path"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateWebhookEndpointRequest"}}}},"responses":{"200":{"description":"The endpoint.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEndpoint"}}}},"400":{"description":"invalid_request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"authentication_failed (missing_api_key, invalid_api_key, api_key_revoked, api_key_expired)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"permission_denied (token_scope): a client token cannot call this route","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found (webhook_endpoint)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited, with Retry-After in seconds","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"delete":{"tags":["Webhooks"],"summary":"Delete a webhook endpoint","description":"Its deliveries still pending fail with `endpoint_deleted`. Jobs' own `webhook_url` deliveries are not affected.","security":[{"bearer":[]}],"parameters":[{"schema":{"type":"string","maxLength":64,"description":"The endpoint id.","example":"we_4n8c2kq0x7m1v5z3b9r6t0wa"},"required":true,"description":"The endpoint id.","name":"id","in":"path"}],"responses":{"204":{"description":"Deleted."},"401":{"description":"authentication_failed (missing_api_key, invalid_api_key, api_key_revoked, api_key_expired)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"permission_denied (token_scope): a client token cannot call this route","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found (webhook_endpoint)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited, with Retry-After in seconds","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/webhook-deliveries":{"get":{"tags":["Webhooks"],"summary":"List webhook deliveries","description":"The newest first, a page at a time: pass `next_cursor` as `cursor` for the next page.","security":[{"bearer":[]}],"parameters":[{"schema":{"type":"integer","minimum":1,"maximum":100,"default":20,"description":"Deliveries per page, 1 to 100."},"required":false,"description":"Deliveries per page, 1 to 100.","name":"limit","in":"query"},{"schema":{"type":"string","maxLength":200,"description":"The `next_cursor` of the previous page."},"required":false,"description":"The `next_cursor` of the previous page.","name":"cursor","in":"query"}],"responses":{"200":{"description":"One page of deliveries.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookDeliveryList"}}}},"400":{"description":"invalid_request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"authentication_failed (missing_api_key, invalid_api_key, api_key_revoked, api_key_expired)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"permission_denied (token_scope): a client token cannot call this route","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited, with Retry-After in seconds","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/jobs/{id}/webhook-deliveries":{"get":{"tags":["Webhooks"],"summary":"List a job's webhook deliveries","description":"One per target (the job's `webhook_url`, the default endpoint) once the job has ended.","security":[{"bearer":[]}],"parameters":[{"schema":{"type":"string","maxLength":64,"description":"The job id.","example":"job_3k9x0c2mfq8w1n7r5t4b6v2z"},"required":true,"description":"The job id.","name":"id","in":"path"}],"responses":{"200":{"description":"The job's deliveries.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/WebhookDelivery"}}},"required":["data"]}}}},"401":{"description":"authentication_failed (missing_api_key, invalid_api_key, api_key_revoked, api_key_expired)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"permission_denied (token_scope): a client token cannot call this route","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found (job)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited, with Retry-After in seconds","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/webhook-deliveries/{id}/retry":{"post":{"tags":["Webhooks"],"summary":"Send a delivery again","description":"One more attempt, now, with the same `webhook-id`, of a delivery that was delivered or failed.","security":[{"bearer":[]}],"parameters":[{"schema":{"type":"string","maxLength":64,"description":"The delivery id.","example":"msg_5d0c8f7a1b2e4c6d9e0f1a2b"},"required":true,"description":"The delivery id.","name":"id","in":"path"}],"responses":{"202":{"description":"The delivery, pending its new attempt.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookDelivery"}}}},"401":{"description":"authentication_failed (missing_api_key, invalid_api_key, api_key_revoked, api_key_expired)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"permission_denied (token_scope): a client token cannot call this route","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found (webhook_delivery)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"409":{"description":"conflict (webhook_delivery_pending)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited, with Retry-After in seconds","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/client-tokens":{"post":{"tags":["Client tokens"],"summary":"Mint a client token for an app or a web page","description":"A short-lived token for one end user's action, with a narrow grant: uploads, reading the jobs you name, or both. Call it from your server; the token is shown once. With `continues`, the token refreshes a chain and is no wider than its newest token.","security":[{"bearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateClientTokenRequest"}}}},"responses":{"201":{"description":"The token, once. Hand `token` and `id` to the app.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClientToken"}}}},"400":{"description":"invalid_request: a field, a limit past the plan, or a continuation wider than its chain","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"authentication_failed (missing_api_key, invalid_api_key, api_key_revoked, api_key_expired)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"permission_denied (account_disabled, token_scope)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found (job): an id in jobs.read is not one of your jobs","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"413":{"description":"limit_exceeded (request_body_size)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited, with Retry-After in seconds","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"service_unavailable (temporary): other continuations of the chain kept landing first; mint again","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/client-tokens/{id}":{"delete":{"tags":["Client tokens"],"summary":"Revoke a client token and its chain","description":"Revokes the token and every token of its chain at once; uploads they created and have not sent stop working. Again is 204.","security":[{"bearer":[]}],"parameters":[{"schema":{"type":"string","pattern":"^ct_[a-z0-9]{24}$","description":"The id of a client token.","example":"ct_4m8x2k9q0c3v7n1r5t6b2z8w"},"required":true,"description":"The id of a client token.","name":"id","in":"path"}],"responses":{"204":{"description":"Revoked."},"401":{"description":"authentication_failed (missing_api_key, invalid_api_key, api_key_revoked, api_key_expired)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"permission_denied (token_scope): a client token cannot call this route","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"not_found (client_token)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited, with Retry-After in seconds","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/v1/client-tokens/revoke":{"post":{"tags":["Client tokens"],"summary":"Revoke an end user's client tokens","description":"Revokes every chain with a token of `subject`: for a user you ban or sign out.","security":[{"bearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RevokeClientTokensRequest"}}}},"responses":{"200":{"description":"How many tokens were revoked.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RevokedClientTokens"}}}},"400":{"description":"invalid_request","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"authentication_failed (missing_api_key, invalid_api_key, api_key_revoked, api_key_expired)","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"permission_denied (token_scope): a client token cannot call this route","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"rate_limited, with Retry-After in seconds","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}}},"webhooks":{}}