{"name":"TechTools Video Editor API","version":"2.0","updated":"2026-09-02","summary":"Server-side single-clip video processing (FFmpeg) for scripts and AI agents. The interactive editor at /tools/video-editor/ is a client-side multi-track NLE (WebGL2 + WebCodecs) and does not use these endpoints; its project files (.ttvp.json) are documented below so agents can generate them.","base_url":"https://techtools.cz/video-editor-api","auth":"None. Public, rate-limited by IP. Uploaded files are purged after ~1 hour.","limits":{"max_upload_bytes":3221225472,"max_processing_seconds":1800,"max_concurrent_jobs":2,"merge_max_videos":5},"endpoints":[{"method":"POST","path":"/upload","content_type":"multipart/form-data","params":{"video":"file (mp4, webm, mov, avi, mkv)"},"returns":{"file_id":"hex id","duration":"seconds","width":"px","height":"px","size":"bytes"},"curl":"curl -F video=@clip.mp4 https://techtools.cz/video-editor-api/upload"},{"method":"GET","path":"/videos/:id/stream","returns":"video bytes (supports Range)"},{"method":"POST","path":"/videos/:id/process","content_type":"application/json","body":{"trim":{"start":0,"end":10},"speed":1.0,"effects":{"brightness":0,"contrast":100,"saturation":100,"gamma":1,"hue":0},"filter":"null | grayscale | sepia | invert | blur | sharpen | vignette","transform":{"rotate":0,"flipH":false,"flipV":false,"crop":{"x":0,"y":0,"w":1280,"h":720}},"textOverlays":[{"text":"Hello","fontSize":48,"color":"#ffffff","position":"bottom-center"}],"audio":{"volume":100,"muted":false,"fadeIn":0,"fadeOut":0},"format":"mp4 | webm","quality":"low | medium | high","resolution":"original | 480p | 720p | 1080p"},"returns":{"status":202,"file_id":"output id","status_url":"/video-editor-api/videos/:id/status"},"notes":"Async. Poll status_url every 1-2 s. A remux fast path (stream copy) is used when no edit is requested. Returns 429 when 2 jobs already run.","curl":"curl -X POST -H 'Content-Type: application/json' -d '{\"trim\":{\"start\":0,\"end\":5},\"format\":\"mp4\"}' https://techtools.cz/video-editor-api/videos/FILE_ID/process"},{"method":"GET","path":"/videos/:id/status","returns":{"status":"processing | done | failed","percent":"0-100","download_url":"when done"}},{"method":"GET","path":"/videos/:id/download","returns":"processed video bytes (attachment)"},{"method":"POST","path":"/videos/:id/trim","body":{"start":0,"end":10},"notes":"Legacy synchronous trim (5 min timeout)."},{"method":"POST","path":"/merge","content_type":"application/json","body":{"video_ids":["id1","id2"]},"notes":"Synchronous concat of up to 5 uploaded videos."},{"method":"DELETE","path":"/videos/:id","returns":{"success":true}},{"method":"GET","path":"/docs","returns":"this document"}],"editor_project_format":{"description":"The browser editor autosaves projects locally and can import/export .ttvp.json files. Open one directly with /tools/video-editor/?project=\u003chttps URL of the JSON\u003e (CORS-readable).","schema":{"version":2,"name":"string","settings":{"width":1920,"height":1080,"fps":30,"bg":"#000000"},"media":{"\u003cmediaId\u003e":{"id":"string","name":"file.mp4","type":"video | audio | image","duration":"seconds","width":"px","height":"px","hasAudio":true}},"tracks":[{"id":"string","kind":"video | audio","name":"string","muted":false,"solo":false,"locked":false,"hidden":false,"volume":1,"opacity":1}],"clips":[{"id":"string","trackId":"track id","kind":"video | audio | image | text | shape | solid | gradient | countdown | pattern | noise | adjustment","mediaId":"media id or null for generators","start":"timeline seconds","duration":"seconds","in":"source in-point seconds","speed":1,"reverse":false,"freeze":null,"gain":1,"pan":0,"muted":false,"opacity":1,"blend":"normal | multiply | screen | overlay | add | difference | darken | lighten | softlight | hardlight","fadeIn":0,"fadeOut":0,"transform":{"x":0,"y":0,"scale":1,"scaleX":1,"scaleY":1,"rotation":0,"anchorX":0.5,"anchorY":0.5,"cropL":0,"cropR":0,"cropT":0,"cropB":0,"flipH":false,"flipV":false,"fit":"contain | cover | stretch | none"},"mask":{"shape":"rect | ellipse","x":0.5,"y":0.5,"w":1,"h":1,"feather":0,"invert":false,"rotation":0},"effects":[{"id":"string","type":"effect type (60 available, e.g. brightnessContrast, gaussian, glow, chromaKey, vhs)","enabled":true,"params":{}}],"audioEffects":[{"id":"string","type":"audio effect type (eq3, compressor, reverb, delay, …)","enabled":true,"params":{}}],"keyframes":{"\u003cpath e.g. transform.x | opacity | effects.\u003cid\u003e.\u003cparam\u003e\u003e":[{"t":"clip-relative seconds","v":"value","ease":"linear | easeIn | easeOut | easeInOut | easeOutBounce | easeOutElastic | hold"}]},"transitionIn":{"type":"transition type (40 available, e.g. crossfade, dipBlack, wipe, push, cube)","duration":1,"ease":"easeInOut","params":{}},"gen":"generator params for text/shape/solid/gradient/countdown clips (see the tool CLAUDE.md)"}],"markers":[{"id":"string","time":0,"name":"string","color":"#f59e0b"}],"range":{"in":null,"out":null}},"notes":"Media blobs are NOT embedded in the JSON; the editor asks the user to relink missing files. Generator-only projects (titles, shapes, gradients, countdowns) need no media at all."},"links":{"tool":"https://techtools.cz/tools/video-editor/","llms":"https://techtools.cz/llms.txt"}}