Skip to main content

Documentation 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.

Yoink includes two complementary post-processing tools: Convert transforms a file into a different format, optionally trimming or cropping it along the way, while Compress reduces a video’s file size to a target in megabytes or a chosen quality level using ffmpeg. Both tools accept direct uploads for smaller files, and a chunked upload path for files up to 8 GB.

Format conversion

The converter remuxes or re-encodes a video or audio file into any supported container or audio format. It uses ffmpeg under the hood and intelligently decides whether to copy streams or re-encode based on codec compatibility and your preferences.

Simple upload (≤ typical browser limit)

POST /api/convert
Content-Type: multipart/form-data
FieldDefaultDescription
fileThe media file to convert
formatmp4Target format: mp4, webm, mkv, mov, mp3, m4a, opus, wav, flac
qualitymediumRe-encode quality: high (CRF 18), medium (CRF 23), low (CRF 28)
reencodeautoauto — copy if codec is compatible; always — force re-encode; never — always stream-copy
startTimeTrim start — seconds or HH:MM:SS
endTimeTrim end — seconds or HH:MM:SS
audioBitrate192Audio bitrate for re-encodes: 64, 96, 128, 192, 256, 320
cropRatioPreset aspect ratio crop: 16:9, 9:16, 1:1, 4:3, 4:5
clientIdPer-client concurrency tracking

Large file path (chunked upload)

For files that exceed a typical form upload limit, use the three-step chunked upload flow before calling convert:
1

Initialise the upload

POST /api/upload/init
Content-Type: application/json
{
  "fileName": "source.mp4",
  "fileSize": 2147483648,
  "totalChunks": 42
}
Returns { "uploadId": "..." }. Maximum 200 chunks per upload.
2

Send each chunk

POST /api/upload/chunk/{uploadId}/{chunkIndex}
Content-Type: multipart/form-data
Send chunk data in the chunk field. Each chunk is up to 50 MB (ChunkSize).
3

Complete and convert

POST /api/upload/complete/{uploadId}
Returns { "filePath": "<token>", "fileName": "..." }. Use the filePath token in the convert-chunked request:
POST /api/convert-chunked
Content-Type: application/json
{
  "filePath": "<token>",
  "fileName": "source.mp4",
  "format": "webm",
  "quality": "high",
  "reencode": "auto",
  "startTime": "0",
  "endTime": "120",
  "audioBitrate": "192",
  "cropRatio": "16:9",
  "clientId": "your-client-id"
}
Returns { "jobId": "..." } — poll GET /api/job/{jobId}/status and download via GET /api/job/{jobId}/download.

Multi-segment extraction

The convert-chunked endpoint supports a segments array for extracting multiple non-contiguous clips and concatenating them into a single output file:
{
  "filePath": "<token>",
  "format": "mp4",
  "segments": [
    { "start": 10.0, "end": 45.5 },
    { "start": 120.0, "end": 180.0 }
  ]
}
Maximum 20 segments per job (MaxSegments).

Custom pixel-level crop

Instead of a preset aspect ratio, you can specify exact pixel coordinates:
{
  "filePath": "<token>",
  "format": "mp4",
  "cropX": 100,
  "cropY": 50,
  "cropW": 1280,
  "cropH": 720
}
Both cropW and cropH must be even numbers. The crop rectangle must fit within the source video bounds.

Re-encode modes explained

ModeBehaviour
autoCopies streams if the codec is compatible with the target container; re-encodes otherwise
alwaysAlways re-encodes — use when you need guaranteed compatibility or want to apply CRF quality
neverAlways stream-copies — fastest, but may fail if the codec is incompatible with the target container

Codec compatibility table

ContainerCompatible codecs (copy)
mp4h264, avc, hevc, h265
webmvp8, vp9, av1
mkvany codec
movh264, hevc, prores

Fetching a remote URL for conversion

If you have a URL rather than a local file, use POST /api/fetch-url to download it to the server first:
POST /api/fetch-url
Content-Type: application/json
{ "url": "https://example.com/video.mp4" }
Returns { "filePath": "<token>", "fileName": "...", "fileSize": ..., "duration": ..., "width": ..., "height": ... }. Use the filePath token with convert-chunked.

Shared limits

LimitValue
Max file size8 GB
Max video duration4 hours
Max concurrent jobs per client3
Max segments (convert-chunked)20
Max chunks per upload200
Chunk size50 MB

Build docs developers (and LLMs) love