Developer API / docs
Tool catalog
Generated from the same manifest the server validates against, so this page and the API cannot disagree. GET /v1/tools returns it as JSON.
Merge PDF merge-pdf
Combine two or more PDFs into one, in order. Lossless page copying - text stays selectable.
In: pdf (up to 100 MB, several files). Out: pdf.
No options.
task
"work": { "operation": "merge-pdf", "input": ["in1", "in2"] }Split PDF split-pdf
Extract pages from a PDF into a new document. 'pages' takes numbers and ranges, e.g. "1-3,7,9-10".
In: pdf (up to 100 MB, one file). Out: pdf.
pages- string, required
task
"work": { "operation": "split-pdf", "input": ["in1"], "pages": "..." }Rotate PDF rotate-pdf
Rotate all pages, or just the pages you name, by 90, 180 or 270 degrees.
In: pdf (up to 100 MB, one file). Out: pdf.
angle- integer, one of 90, 180, 270, requiredpages- string
task
"work": { "operation": "rotate-pdf", "input": ["in1"], "angle": 90 }PDF to Text pdf-to-text
Extract the text layer of a PDF to plain text, one blank line between pages. Scanned pages without a text layer come out empty - this is extraction, not OCR.
In: pdf (up to 100 MB, one file). Out: txt.
No options.
task
"work": { "operation": "pdf-to-text", "input": ["in1"] }Convert Image convert-image
Convert PNG, JPEG, WebP, AVIF or GIF to PNG, JPEG, WebP or AVIF.
In: png, jpg, webp, avif, gif (up to 50 MB, one file). Out: png, jpg, webp, avif.
format- string, one of png, jpeg, webp, avif, requiredquality- integer, 1..100
task
"work": { "operation": "convert-image", "input": ["in1"], "format": "..." }Resize Image resize-image
Resize by width, height or both. 'fit' controls how the aspect ratio is handled (inside keeps it, cover crops, fill stretches).
In: png, jpg, webp, avif, gif (up to 50 MB, one file). Out: png, jpg, webp, avif.
width- integer, 1..10000height- integer, 1..10000fit- string, one of inside, cover, contain, fillformat- string, one of png, jpeg, webp, avif
task
"work": { "operation": "resize-image", "input": ["in1"] }Compress Image compress-image
Recompress an image by quality, or give target_kb and the engine finds the best quality that fits under that size. If the target is impossible it says so instead of silently missing it.
In: png, jpg, webp, avif, gif (up to 50 MB, one file). Out: jpg, webp, avif.
quality- integer, 1..100target_kb- integer, 1..51200format- string, one of jpeg, webp, avif
task
"work": { "operation": "compress-image", "input": ["in1"] }Optimize SVG optimize-svg
Minify an SVG with svgo (multipass). 'precision' sets decimal places for coordinates.
In: svg (up to 10 MB, one file). Out: svg.
precision- integer, 0..8
task
"work": { "operation": "optimize-svg", "input": ["in1"] }Markdown to HTML markdown-to-html
Render Markdown to a standalone HTML document.
In: md, txt (up to 10 MB, one file). Out: html.
title- string
task
"work": { "operation": "markdown-to-html", "input": ["in1"] }Generate QR Code generate-qr
Generate a QR code as PNG or SVG from text or a URL. No input file - the 'text' option is the payload.
No input file. Out: png, svg.
text- string, requiredformat- string, one of png, svgsize- integer, 128..2048margin- integer, 0..8ecc- string, one of L, M, Q, H
task
"work": { "operation": "generate-qr", "text": "..." }Delete PDF Pages delete-pdf-pages
Remove the pages you name and keep the rest. 'pages' takes numbers and ranges, e.g. "2,5-7".
In: pdf (up to 100 MB, one file). Out: pdf.
pages- string, required
task
"work": { "operation": "delete-pdf-pages", "input": ["in1"], "pages": "..." }Add Page Numbers add-page-numbers
Stamp a page number on every page. Choose the corner and the starting number.
In: pdf (up to 100 MB, one file). Out: pdf.
position- string, one of bottom-center, bottom-left, bottom-right, top-center, top-left, top-rightstart- integer, 0..9999size- integer, 6..36
task
"work": { "operation": "add-page-numbers", "input": ["in1"] }Watermark PDF watermark-pdf
Stamp a diagonal text watermark across every page. Text only - image watermarks are not supported yet and the docs say so.
In: pdf (up to 100 MB, one file). Out: pdf.
text- string, requiredsize- integer, 8..144angle- integer, 0..90opacity- number, 0.05..1
task
"work": { "operation": "watermark-pdf", "input": ["in1"], "text": "..." }Edit PDF Metadata pdf-metadata
Set or strip the document info: title, author, subject, keywords. strip=true clears everything first.
In: pdf (up to 100 MB, one file). Out: pdf.
title- stringauthor- stringsubject- stringkeywords- stringstrip- boolean
task
"work": { "operation": "pdf-metadata", "input": ["in1"] }Images to PDF image-to-pdf
Combine images into a PDF, one page per image, in input order. page=a4 centers each image on A4.
In: png, jpg, webp, avif, gif (up to 50 MB, several files). Out: pdf.
page- string, one of auto, a4
task
"work": { "operation": "image-to-pdf", "input": ["in1", "in2"] }PDF to JPG pdf-to-jpg
Render PDF pages to images, one file per page. 'pages' like "1-3", at most 20 per task.
In: pdf (up to 50 MB, one file). Out: jpg, png.
pages- stringscale- integer, 1..4format- string, one of jpg, png
task
"work": { "operation": "pdf-to-jpg", "input": ["in1"] }Crop Image crop-image
Cut a rectangle out of an image: left, top, width, height in pixels.
In: png, jpg, webp, avif, gif (up to 50 MB, one file). Out: png, jpg, webp, avif.
left- integer, 0..100000top- integer, 0..100000width- integer, 1..100000, requiredheight- integer, 1..100000, required
task
"work": { "operation": "crop-image", "input": ["in1"], "width": 1, "height": 1 }Rotate Image rotate-image
Rotate by any angle. Non-right angles get a white background on JPEG, transparent elsewhere.
In: png, jpg, webp, avif, gif (up to 50 MB, one file). Out: png, jpg, webp, avif.
angle- integer, -360..360, required
task
"work": { "operation": "rotate-image", "input": ["in1"], "angle": 1 }Flip Image flip-image
Mirror an image horizontally or vertically.
In: png, jpg, webp, avif, gif (up to 50 MB, one file). Out: png, jpg, webp, avif.
direction- string, one of horizontal, vertical, required
task
"work": { "operation": "flip-image", "input": ["in1"], "direction": "..." }Grayscale Image grayscale-image
Convert an image to grayscale.
In: png, jpg, webp, avif, gif (up to 50 MB, one file). Out: png, jpg, webp, avif.
No options.
task
"work": { "operation": "grayscale-image", "input": ["in1"] }Blur Image blur-image
Gaussian blur. sigma controls the strength.
In: png, jpg, webp, avif, gif (up to 50 MB, one file). Out: png, jpg, webp, avif.
sigma- number, 0.3..100, required
task
"work": { "operation": "blur-image", "input": ["in1"], "sigma": 1 }Strip Image Metadata strip-image-metadata
Re-encode the image without EXIF, GPS, ICC and XMP data. Pixels unchanged apart from re-encoding.
In: png, jpg, webp, avif, gif (up to 50 MB, one file). Out: png, jpg, webp, avif, gif.
No options.
task
"work": { "operation": "strip-image-metadata", "input": ["in1"] }SVG to PNG svg-to-png
Rasterize an SVG. Set width/height, or scale to multiply its intrinsic size.
In: svg (up to 10 MB, one file). Out: png.
width- integer, 1..10000height- integer, 1..10000scale- integer, 1..10
task
"work": { "operation": "svg-to-png", "input": ["in1"] }JSON to YAML json-to-yaml
Convert a JSON document to YAML.
In: json (up to 10 MB, one file). Out: yaml.
No options.
task
"work": { "operation": "json-to-yaml", "input": ["in1"] }YAML to JSON yaml-to-json
Convert a YAML document to JSON.
In: yaml (up to 10 MB, one file). Out: json.
indent- integer, 0..8
task
"work": { "operation": "yaml-to-json", "input": ["in1"] }CSV to JSON csv-to-json
Parse a CSV (first row as headers) into a JSON array of objects. Numbers become numbers.
In: csv (up to 10 MB, one file). Out: json.
No options.
task
"work": { "operation": "csv-to-json", "input": ["in1"] }JSON to CSV json-to-csv
Turn a JSON array of objects into CSV. Nested values are stringified into their cell.
In: json (up to 10 MB, one file). Out: csv.
delimiter- string, one of ,, ;, tab
task
"work": { "operation": "json-to-csv", "input": ["in1"] }Format JSON format-json
Pretty-print or minify JSON. indent=0 minifies.
In: json (up to 10 MB, one file). Out: json.
indent- integer, 0..8
task
"work": { "operation": "format-json", "input": ["in1"] }Minify CSS minify-css
Minify a stylesheet with clean-css.
In: css (up to 5 MB, one file). Out: css.
No options.
task
"work": { "operation": "minify-css", "input": ["in1"] }Minify JavaScript minify-js
Minify a script with terser.
In: js (up to 5 MB, one file). Out: js.
No options.
task
"work": { "operation": "minify-js", "input": ["in1"] }Minify HTML minify-html
Minify an HTML document, including its inline CSS and JS.
In: html (up to 5 MB, one file). Out: html.
No options.
task
"work": { "operation": "minify-html", "input": ["in1"] }HTML to Markdown html-to-markdown
Convert an HTML document to Markdown (ATX headings, fenced code).
In: html (up to 5 MB, one file). Out: md.
No options.
task
"work": { "operation": "html-to-markdown", "input": ["in1"] }Convert Subtitles convert-subtitles
Convert between SRT and VTT. Already in the target format passes through unchanged.
In: srt, vtt, txt (up to 5 MB, one file). Out: srt, vtt.
format- string, one of srt, vtt, required
task
"work": { "operation": "convert-subtitles", "input": ["in1"], "format": "..." }Detect Indian PII detect-pii
Scan text for 18 Indian identifier types (Aadhaar with checksum, PAN, GSTIN, UPI, IFSC, phone, voter ID and more). The JSON report gives positions, validity, confidence and a masked stand-in - it never repeats the raw identifier.
In: txt, md, csv, json, html (up to 10 MB, one file). Out: json.
types- stringrequire_valid- boolean
task
"work": { "operation": "detect-pii", "input": ["in1"] }Redact Indian PII redact-pii
Return a copy of the text with every detected Indian identifier replaced by its masked form. Checksum-validated detection, same engine as detect-pii.
In: txt, md, csv, json, html (up to 10 MB, one file). Out: txt.
types- stringrequire_valid- booleanmask_char- string
task
"work": { "operation": "redact-pii", "input": ["in1"] }OCR PDF (33 languages) ocr-pdf
Extract text from scanned or image-based PDFs with OCR in 33 languages: English, Hindi and other Devanagari scripts, Arabic, Chinese, Japanese, Korean, Tamil, Telugu, Bengali, Urdu and more. format=text gives reading-order plain text, format=json gives every token with its position - the raw material for building spreadsheets from scanned tables.
In: pdf (up to 30 MB, one file). Out: txt, json.
langs- stringformat- string, one of text, json
task
"work": { "operation": "ocr-pdf", "input": ["in1"] }