The workbench, over HTTP
API
Every file tool is reachable programmatically at a single endpoint, with an admin-owned key. The same engine runs behind it, so the conversions, limits, and cleanup are identical to the site. It is stable enough to back a native app.
Authenticate
Requests carry an API key in the x-api-key header. Keys are admin-owned, created and revoked from the vault panel; the plaintext is shown once and stored only as a SHA-256 hash. A real key that does not belong to an admin is refused.
x-api-key: c24_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Convert a file
POST /api/v1/convert/<tool> as multipart/form-data. Attach the input as one or more files fields, and an optional optionsfield holding a JSON object of the tool's settings. The response is the produced file, as an attachment.
curl -X POST https://cyber24.dev/api/v1/convert/pdf-compress \ -H "x-api-key: $CYBER24_KEY" \ -F "[email protected]" \ -F 'options={"level":"ebook"}' \ -o report.compressed.pdf
A multi-file result (for example splitting a PDF into pages) comes back as a single .zip. Errors return JSON, { "error": "..." }, with a status code and never any internal detail.
Discover tools
GET /api/v1/convert, same auth, lists every tool a key may drive with its accepted extensions, file count, and size cap.
curl https://cyber24.dev/api/v1/convert -H "x-api-key: $CYBER24_KEY"
Limits
Each key is limited to 60 requests per minute, on top of the shared engine gates. A burst gets 429 with a retry-after header; a saturated box gets 503. Bodies stream, so large uploads do not need to be sent in one buffer.
Tools
Slugs, what they take, and the options they accept.
| tool | accepts | options |
|---|---|---|
| pdf-merge | none | |
| pdf-split | range: string | |
| pdf-compress | level: one of "screen", "ebook", "printer", "prepress" (default "ebook") | |
| pdf-protect | password: string | |
| pdf-unlock | password: string | |
| pdf-rotate | angle: one of "90", "180", "270" (default "90") | |
| pdf-to-images | format: one of "png", "jpg" (default "png") dpi: number 72..300 (default 150) dpi | |
| images-to-pdf | png jpg webp tiff bmp | none |
| pdf-to-text | layout: boolean (default false) | |
| pdf-ocr | pdf png jpg tiff | out: one of "pdf", "txt" (default "pdf") |
| image-convert | png jpg webp avif gif tiff heic bmp | format: one of "webp", "jpg", "png", "avif", "tiff" (default "webp") quality: number 1..100 (default 82) width: number 0..10000 (default 0) px stripMeta: boolean (default true) |
| image-compress | png jpg webp tiff | quality: number 1..100 (default 78) |
| image-resize | png jpg webp avif tiff | width: number 0..10000 (default 1280) px height: number 0..10000 (default 0) px format: one of "webp", "jpg", "png", "avif", "tiff" (default "webp") |
| raw-convert | cr2 cr3 nef arw dng raf rw2 orf pef | format: one of "jpg", "png", "tiff", "webp" (default "jpg") quality: number 1..100 (default 90) |
| video-convert | mp4 mkv mov webm avi flv m4v wmv | format: one of "mp4", "webm", "mkv" (default "mp4") |
| video-compress | mp4 mkv mov webm avi m4v | crf: number 20..35 (default 28) |
| video-to-gif | mp4 mkv mov webm avi m4v | start: number 0..100000 (default 0) s duration: number 1..30 (default 6) s width: number 120..1000 (default 480) px fps: number 5..24 (default 12) |
| video-trim | mp4 mkv mov webm avi m4v | start: number 0..100000 (default 0) s duration: number 1..100000 (default 10) s |
| audio-extract | mp4 mkv mov webm avi m4v flv | format: one of "mp3", "m4a", "wav", "flac", "opus" (default "mp3") |
| audio-convert | mp3 wav m4a flac ogg opus aac wma aiff | format: one of "mp3", "wav", "m4a", "flac", "opus", "ogg" (default "mp3") |
| audio-compress | mp3 wav m4a flac ogg opus aac | bitrate: one of "96k", "128k", "160k", "192k" (default "128k") |
| document-convert | doc docx docm dot dotx odt rtf txt md html htm wps wpd abw lwp sdw tex pages | format: one of "pdf", "docx", "odt", "rtf", "txt", "html", "epub" (default "pdf") |
| spreadsheet-convert | xls xlsx xlsm xlsb xltx ods csv tsv dbf et numbers | format: one of "xlsx", "ods", "csv", "pdf", "html" (default "xlsx") |
| presentation-convert | ppt pptx pptm odp key | format: one of "pdf", "pptx", "odp" (default "pdf") |
| ebook-convert | epub mobi azw azw3 azw4 fb2 lit lrf pdb pml rb snb tcr htmlz cbz cbr chm prc docx txt html pdf | format: one of "epub", "mobi", "azw3", "pdf", "txt", "fb2", "docx" (default "epub") |
Keys are created and revoked from the admin vault panel. Keep them secret; a leaked key can be revoked there.
