Compatible files
What you can send, and what you can get back. Reading is the wider set — a container can be perfectly readable without being something worth encoding to — so the two lists differ per medium.
These tables are generated from the SDK itself, so they can't drift from what the engine actually does. If a format is listed, it works. How each medium behaves on the way through — the encode dials, what survives a pass, what gets dropped — is on its own page: Images, Video, Audio, Documents.
Images
| Direction | Formats |
|---|
| Send us | png, jpg, jpeg, webp, gif, avif, tiff, tif |
| Get back | png, jpg, webp, gif, avif, tiff |
Video
| Direction | Formats |
|---|
| Send us | mp4, m4v, webm, mov, mkv, avi, ogv, mpg, mpeg, ts, 3gp |
| Get back | mp4, webm, mov, mkv |
Audio
| Direction | Formats |
|---|
| Send us | mp3, m4a, m4b, aac, opus, ogg, oga, flac, wav, wave, aiff, aif, wma, amr, caf |
| Get back | mp3, m4a, opus, flac, wav |
Documents
| Direction | Formats |
|---|
| Send us | pdf |
| Get back | txt, md |
One medium per pipeline
A graph operates on one medium: image.* nodes take images, video.* take video, document.* take PDFs. Mixing families in one graph is rejected at validation, before anything uploads.
- The SDK types an input from its filename (or an explicit
contentType). A name it doesn't recognise is refused at the call site, so a whole batch never uploads to find out. - Within a batch, one bad file fails only its own slot — the rest still complete, and only successful outputs are billed.
Next steps
- Recipes — turn a format into a working call.