Yoink exposes two processing pipelines: convert (format/codec re-encoding with optional trim and crop) and compress (size-targeting via two-pass H.264 encoding or CRF quality mode). Both pipelines support two upload strategies: a simple multipart upload for files small enough to fit in a single HTTP request, and a chunked upload flow for large files that need to be reassembled server-side before processing. After chunked assembly — or for files already on the internet — you can useDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/coah80/yoink/llms.txt
Use this file to discover all available pages before exploring further.
POST /api/fetch-url to pull a URL directly into server storage and receive a file token, which can then be passed to /api/convert-chunked or /api/compress-chunked.
The synchronous endpoints (
/api/convert, /api/compress) stream the result directly back in the HTTP response. The chunked endpoints (/api/convert-chunked, /api/compress-chunked) return a jobId immediately; you must poll GET /api/job/{jobId}/status and fetch the result from GET /api/job/{jobId}/download when status is complete.POST /api/convert
Re-encodes an uploaded file to a target format. For video formats, the codec is copied when compatible (reencode=auto) and only re-encoded when necessary or explicitly requested. For audio formats, the source audio is always re-encoded.
Form Fields
The video or audio file to convert. Supported input extensions:
mp4, webm, mkv, mov, avi, flv, wmv, mp3, m4a, wav, flac, ogg, opus, aac, wma, ts, m4v, 3gp, mpg, mpeg. Maximum size is 8 GB.Target output format. Video:
mp4, webm, mkv, mov. Audio: mp3, m4a, opus, wav, flac.CRF quality preset when re-encoding video. One of
high (CRF 18), medium (CRF 23), low (CRF 28).Re-encode strategy.
auto copies the codec when it is already compatible with the target container, otherwise re-encodes. always forces a full re-encode regardless. never always copies — conversion will fail if the codec is incompatible.Optional trim start point. Accepts seconds (e.g.
30) or HH:MM:SS (e.g. 00:00:30).Optional trim end point. Same format as
startTime. Must be greater than startTime.Audio encoding bitrate in kbps. One of
64, 96, 128, 192, 256, 320.Aspect-ratio crop applied before encoding. One of
16:9, 9:16, 1:1, 4:3, 4:5. The crop is centre-aligned. Providing this field forces a re-encode even when reencode=auto.Optional session identifier for per-client job limiting (max 3 concurrent).
Response
Streams the converted binary file on success with appropriateContent-Type and Content-Disposition: attachment headers.
curl Example
POST /api/compress
Compresses a video to a target file size using two-pass H.264 encoding, or to a target quality using CRF mode. Always outputs MP4.Form Fields
The video file to compress. Same supported extensions as
/api/convert.Target output size in megabytes. Used when
mode=size. The encoder calculates the required bitrate to hit this target.Video duration hint in seconds. If
0 (or omitted), the server probes the file with ffprobe. Providing an accurate value slightly speeds up bitrate calculation.Compression strategy.
size targets a specific file size via two-pass encoding. quality uses a CRF value from the chosen preset.Quality level used in both modes. One of
high, medium, low. In quality mode this maps directly to a CRF value.ffmpeg encoding speed/quality tradeoff. One of
fast (ultrafast), balanced (medium), quality (slow).Noise reduction filter.
auto applies light denoising for high-bitrate sources. none, light, moderate, heavy override the automatic selection.When
true, the encoder automatically downscales the resolution when the target bitrate is too low to sustain the source resolution with acceptable quality.Pre-generated UUID for Server-Sent Events progress tracking via
GET /api/progress/{progressId}.Session identifier for per-client job limiting.
Response
Streams the compressed MP4 file on success.curl Example
Chunked Upload Flow
Use the chunked upload API when the file is too large to upload in a single multipart request, or when you need resumable uploads. The flow has three steps:filePath token from step 3, pass it to /api/convert-chunked or /api/compress-chunked. File tokens are single-use — they are consumed on the first chunked processing call.
POST /api/upload/init
UUID to use in subsequent chunk and complete calls.
POST /api/upload/chunk//
chunk. chunkIndex is zero-based.
Number of chunks received so far.
Total number of expected chunks.
true when all chunks have been received and you may call /api/upload/complete.POST /api/upload/complete/
Assembles all chunks into a single file and returns a secure token.true on successful assembly.Opaque token representing the assembled file. Pass this as
filePath in convert/compress-chunked requests.Original filename provided during init.
POST /api/convert-chunked
Starts an async conversion job for a previously uploaded file. Returns ajobId immediately.
Body Fields
Token from
POST /api/upload/complete or POST /api/fetch-url.Target output format. Same options as
/api/convert.Original filename hint, used to derive the output filename.
CRF quality preset.
high, medium, or low.Re-encode strategy.
auto, always, or never.Trim start in seconds or
HH:MM:SS.Trim end in seconds or
HH:MM:SS. Must be greater than startTime.Audio bitrate in kbps. One of
64, 96, 128, 192, 256, 320.Aspect-ratio crop. One of
16:9, 9:16, 1:1, 4:3, 4:5.Pixel-precise crop: left edge. All four raw crop fields (
cropX, cropY, cropW, cropH) must be provided together. Takes precedence over cropRatio.Pixel-precise crop: top edge.
Pixel-precise crop: width. Must be a positive even integer.
Pixel-precise crop: height. Must be a positive even integer.
Array of
{ start: number, end: number } objects for multi-segment extraction. Maximum 20 segments. Each segment’s end must be greater than start.Session identifier for per-client job limiting.
Response
Polling the Job
One of
processing, complete, error.Completion percentage, 0–100.
Human-readable status message.
Error message, present only when
status is error.Transcript text content, present only for transcription jobs in
text mode.status is complete, download the result with:
curl Example
POST /api/compress-chunked
Starts an async compression job for a previously uploaded file. Same token-based flow as/api/convert-chunked.
Body Fields
Token from
POST /api/upload/complete or POST /api/fetch-url.Original filename hint.
Target output size in MB (used when
mode=size).Duration hint in seconds (0 = probe automatically).
size or quality.high, medium, or low.fast, balanced, or quality.auto, none, light, moderate, or heavy.Auto-downscale resolution when bitrate is insufficient for source resolution.
Session identifier for per-client job limiting.
Response
GET /api/job/{jobId}/status and GET /api/job/{jobId}/download pattern described above.
POST /api/fetch-url
Downloads a public URL via yt-dlp to server temporary storage and returns a file token. The token can be passed directly to/api/convert-chunked or /api/compress-chunked without needing to upload the file yourself.
Body
Response
Opaque file token to pass as
filePath in subsequent processing calls.Filename of the downloaded file (derived from yt-dlp output).
File size in bytes.
Video duration in seconds (from ffprobe).
Video width in pixels.
Video height in pixels.