docs / file-convert

File Conversion API

File Conversion API

base /file-convert/v131 endpoints
post/file-convert/v1/pdf_extract_text1 credit

Extract text from a PDF (per page). mode=layout preserves visual alignment (pdfplumber); mode=plain is fastest. Flags likely-scanned PDFs.

ParameterAllowed / rangeDescription
file_b64optionalThe input file as base64 (data-URI prefix tolerated). Max 25MB. Provide file_b64 OR file_url. Multipart upload also works: POST the file as the 'file' form field.
file_urloptionalhttps URL of the input file — fetched server-side through the proxy pool; private/internal/metadata addresses are SSRF-blocked. Max 25MB.
filenameoptionalOptional original filename — used only as a hint (e.g. .md detection); the real format is always sniffed from magic bytes.
passwordoptionalPassword for encrypted PDFs. Without it an encrypted input fails cleanly with INVALID_PARAM (we never crack/bypass).
pagesoptionalPage selection, 1-based: '1-3,5,9-' (open ranges OK). Default: all pages.
mode = plainoptionalplain · layoutplain = reading-order text; layout = whitespace-aligned text (tables stay readable).
Try in playground →
post/file-convert/v1/pdf_metadata1 credit

PDF document properties: title/author/dates/producer, page count & size, encryption flag, AcroForm field count.

ParameterAllowed / rangeDescription
file_b64optionalThe input file as base64 (data-URI prefix tolerated). Max 25MB. Provide file_b64 OR file_url. Multipart upload also works: POST the file as the 'file' form field.
file_urloptionalhttps URL of the input file — fetched server-side through the proxy pool; private/internal/metadata addresses are SSRF-blocked. Max 25MB.
filenameoptionalOptional original filename — used only as a hint (e.g. .md detection); the real format is always sniffed from magic bytes.
passwordoptionalPassword for encrypted PDFs. Without it an encrypted input fails cleanly with INVALID_PARAM (we never crack/bypass).
Try in playground →
post/file-convert/v1/pdf_merge1 credit

Merge 2-20 PDFs into one (input order preserved). Output delivery: each produced file ≤10MB comes inline as base64 (files[].file_b64); 10-50MB comes as a one-time download token (files[].download_path, 30min TTL); >50MB total is rejected.

ParameterAllowed / rangeDescription
files_b64optionalArray of base64 files (max 20 total inputs). Combine freely with file_urls; base64 entries come first in the processing order.
file_urlsoptionalArray of https URLs (each SSRF-guarded and fetched server-side).
passwordoptionalPassword for encrypted PDFs. Without it an encrypted input fails cleanly with INVALID_PARAM (we never crack/bypass).
Try in playground →
post/file-convert/v1/pdf_split1 credit

Split a PDF: pages='2-5,8' extracts those pages into one PDF; chunk_size=N splits the whole document into N-page parts (max 100 parts). Output delivery: each produced file ≤10MB comes inline as base64 (files[].file_b64); 10-50MB comes as a one-time download token (files[].download_path, 30min TTL); >50MB total is rejected.

ParameterAllowed / rangeDescription
file_b64optionalThe input file as base64 (data-URI prefix tolerated). Max 25MB. Provide file_b64 OR file_url. Multipart upload also works: POST the file as the 'file' form field.
file_urloptionalhttps URL of the input file — fetched server-side through the proxy pool; private/internal/metadata addresses are SSRF-blocked. Max 25MB.
filenameoptionalOptional original filename — used only as a hint (e.g. .md detection); the real format is always sniffed from magic bytes.
passwordoptionalPassword for encrypted PDFs. Without it an encrypted input fails cleanly with INVALID_PARAM (we never crack/bypass).
pagesoptionalPages to EXTRACT into a single PDF (mutually exclusive with chunk_size).
chunk_sizeoptional1–500Split into parts of N pages each (1 = one PDF per page). Ignored when 'pages' is given.
Try in playground →
post/file-convert/v1/pdf_rotate1 credit

Rotate pages clockwise by 90/180/270° (all pages or a range). Output delivery: each produced file ≤10MB comes inline as base64 (files[].file_b64); 10-50MB comes as a one-time download token (files[].download_path, 30min TTL); >50MB total is rejected.

ParameterAllowed / rangeDescription
file_b64optionalThe input file as base64 (data-URI prefix tolerated). Max 25MB. Provide file_b64 OR file_url. Multipart upload also works: POST the file as the 'file' form field.
file_urloptionalhttps URL of the input file — fetched server-side through the proxy pool; private/internal/metadata addresses are SSRF-blocked. Max 25MB.
filenameoptionalOptional original filename — used only as a hint (e.g. .md detection); the real format is always sniffed from magic bytes.
passwordoptionalPassword for encrypted PDFs. Without it an encrypted input fails cleanly with INVALID_PARAM (we never crack/bypass).
pagesoptionalPage selection, 1-based: '1-3,5,9-' (open ranges OK). Default: all pages.
angle = 90optional90 · 180 · 270Clockwise rotation angle.
Try in playground →
post/file-convert/v1/pdf_to_images1 credit

Render PDF pages to PNG/JPG/WebP (pypdfium2). Max 20 pages per call, dpi ≤ 300. Output delivery: each produced file ≤10MB comes inline as base64 (files[].file_b64); 10-50MB comes as a one-time download token (files[].download_path, 30min TTL); >50MB total is rejected.

ParameterAllowed / rangeDescription
file_b64optionalThe input file as base64 (data-URI prefix tolerated). Max 25MB. Provide file_b64 OR file_url. Multipart upload also works: POST the file as the 'file' form field.
file_urloptionalhttps URL of the input file — fetched server-side through the proxy pool; private/internal/metadata addresses are SSRF-blocked. Max 25MB.
filenameoptionalOptional original filename — used only as a hint (e.g. .md detection); the real format is always sniffed from magic bytes.
passwordoptionalPassword for encrypted PDFs. Without it an encrypted input fails cleanly with INVALID_PARAM (we never crack/bypass).
pagesoptionalPage selection, 1-based: '1-3,5,9-' (open ranges OK). Default: all pages.
to = pngoptionalpng · jpg · webpImage format for the rendered pages (alias: format).
dpi = 150optional36–300Render resolution (36-300).
Try in playground →
post/file-convert/v1/images_to_pdf2 credits

Combine 1-20 images into a single PDF (one page per image; page_size=a4/letter centers each image on a standard page). Output delivery: each produced file ≤10MB comes inline as base64 (files[].file_b64); 10-50MB comes as a one-time download token (files[].download_path, 30min TTL); >50MB total is rejected.

ParameterAllowed / rangeDescription
files_b64optionalArray of base64 files (max 20 total inputs). Combine freely with file_urls; base64 entries come first in the processing order.
file_urlsoptionalArray of https URLs (each SSRF-guarded and fetched server-side).
file_b64optionalSingle image as base64 (or use files_b64).
file_urloptionalhttps URL of the input file — fetched server-side through the proxy pool; private/internal/metadata addresses are SSRF-blocked. Max 25MB.
page_size = autooptionalauto · a4 · letterauto = page matches each image; a4/letter = white page, image fitted+centred.
Try in playground →
post/file-convert/v1/pdf_watermark1 credit

Stamp a text or image watermark over pages (true alpha overlay; diagonal or centred). Output delivery: each produced file ≤10MB comes inline as base64 (files[].file_b64); 10-50MB comes as a one-time download token (files[].download_path, 30min TTL); >50MB total is rejected.

ParameterAllowed / rangeDescription
file_b64optionalThe input file as base64 (data-URI prefix tolerated). Max 25MB. Provide file_b64 OR file_url. Multipart upload also works: POST the file as the 'file' form field.
file_urloptionalhttps URL of the input file — fetched server-side through the proxy pool; private/internal/metadata addresses are SSRF-blocked. Max 25MB.
filenameoptionalOptional original filename — used only as a hint (e.g. .md detection); the real format is always sniffed from magic bytes.
passwordoptionalPassword for encrypted PDFs. Without it an encrypted input fails cleanly with INVALID_PARAM (we never crack/bypass).
pagesoptionalPage selection, 1-based: '1-3,5,9-' (open ranges OK). Default: all pages.
textoptionalWatermark text (UTF-8, DejaVu font). Provide text OR image_b64/image_url.
image_b64optionalWatermark image as base64 (PNG with alpha recommended; scaled to ~40% page width).
image_urloptionalWatermark image URL (SSRF-guarded fetch).
opacity = 0.25optional0.02–1Watermark opacity 0.02-1.0.
position = diagonaloptionaldiagonal · centerText placement.
color = grayoptionalgray · red · black · blueText colour.
font_sizeoptional8–400Text size in pixels at 2× page scale (default: auto ≈ page/10).
Try in playground →
post/file-convert/v1/pdf_fill_form1 credit

AcroForm filling. Without 'fields' → lists the form fields (discovery). With 'fields' → fills and returns the PDF (NeedAppearances set). Output delivery: each produced file ≤10MB comes inline as base64 (files[].file_b64); 10-50MB comes as a one-time download token (files[].download_path, 30min TTL); >50MB total is rejected.

ParameterAllowed / rangeDescription
file_b64optionalThe input file as base64 (data-URI prefix tolerated). Max 25MB. Provide file_b64 OR file_url. Multipart upload also works: POST the file as the 'file' form field.
file_urloptionalhttps URL of the input file — fetched server-side through the proxy pool; private/internal/metadata addresses are SSRF-blocked. Max 25MB.
filenameoptionalOptional original filename — used only as a hint (e.g. .md detection); the real format is always sniffed from magic bytes.
passwordoptionalPassword for encrypted PDFs. Without it an encrypted input fails cleanly with INVALID_PARAM (we never crack/bypass).
fieldsoptional{field_name: value} map. Checkbox values are usually /Yes — run discovery mode first.
Try in playground →
post/file-convert/v1/pdf_redact1 credit

TRUE redaction: target pages are re-rendered with the matches blacked out and REBUILT — original text/fonts/layers destroyed, then verified by re-extraction (output withheld if any remnant). Redacted pages lose selectable text. Find by 'terms' and/or explicit 'areas'. Output delivery: each produced file ≤10MB comes inline as base64 (files[].file_b64); 10-50MB comes as a one-time download token (files[].download_path, 30min TTL); >50MB total is rejected.

ParameterAllowed / rangeDescription
file_b64optionalThe input file as base64 (data-URI prefix tolerated). Max 25MB. Provide file_b64 OR file_url. Multipart upload also works: POST the file as the 'file' form field.
file_urloptionalhttps URL of the input file — fetched server-side through the proxy pool; private/internal/metadata addresses are SSRF-blocked. Max 25MB.
filenameoptionalOptional original filename — used only as a hint (e.g. .md detection); the real format is always sniffed from magic bytes.
passwordoptionalPassword for encrypted PDFs. Without it an encrypted input fails cleanly with INVALID_PARAM (we never crack/bypass).
termsoptionalText terms to find & redact (case-insensitive, matched across words on a line).
areasoptionalExplicit boxes: {page, x0, y0, x1, y1} in PDF points, origin TOP-left.
dpi = 200optional120–300Rebuild resolution for redacted pages.
Try in playground →
post/file-convert/v1/pdf_compress1 credit

Shrink a PDF: stream recompression + embedded-image re-encode (level=low/balanced/strong; strong also caps image resolution). Output delivery: each produced file ≤10MB comes inline as base64 (files[].file_b64); 10-50MB comes as a one-time download token (files[].download_path, 30min TTL); >50MB total is rejected.

ParameterAllowed / rangeDescription
file_b64optionalThe input file as base64 (data-URI prefix tolerated). Max 25MB. Provide file_b64 OR file_url. Multipart upload also works: POST the file as the 'file' form field.
file_urloptionalhttps URL of the input file — fetched server-side through the proxy pool; private/internal/metadata addresses are SSRF-blocked. Max 25MB.
filenameoptionalOptional original filename — used only as a hint (e.g. .md detection); the real format is always sniffed from magic bytes.
passwordoptionalPassword for encrypted PDFs. Without it an encrypted input fails cleanly with INVALID_PARAM (we never crack/bypass).
level = balancedoptionallow · balanced · strongCompression aggressiveness.
Try in playground →
post/file-convert/v1/pdf_protect1 credit

Encrypt a PDF with AES-256 (user password to open; optional owner password). Output delivery: each produced file ≤10MB comes inline as base64 (files[].file_b64); 10-50MB comes as a one-time download token (files[].download_path, 30min TTL); >50MB total is rejected.

ParameterAllowed / rangeDescription
file_b64optionalThe input file as base64 (data-URI prefix tolerated). Max 25MB. Provide file_b64 OR file_url. Multipart upload also works: POST the file as the 'file' form field.
file_urloptionalhttps URL of the input file — fetched server-side through the proxy pool; private/internal/metadata addresses are SSRF-blocked. Max 25MB.
filenameoptionalOptional original filename — used only as a hint (e.g. .md detection); the real format is always sniffed from magic bytes.
passwordoptionalPassword for encrypted PDFs. Without it an encrypted input fails cleanly with INVALID_PARAM (we never crack/bypass).
user_passwordrequiredPassword required to OPEN the PDF (min 4 chars).
owner_passwordoptionalOptional owner/permissions password (defaults to the user password.
Try in playground →
post/file-convert/v1/pdf_unlock1 credit

Remove encryption from a PDF — REQUIRES the correct password (we never crack or bypass protection). Output delivery: each produced file ≤10MB comes inline as base64 (files[].file_b64); 10-50MB comes as a one-time download token (files[].download_path, 30min TTL); >50MB total is rejected.

ParameterAllowed / rangeDescription
file_b64optionalThe input file as base64 (data-URI prefix tolerated). Max 25MB. Provide file_b64 OR file_url. Multipart upload also works: POST the file as the 'file' form field.
file_urloptionalhttps URL of the input file — fetched server-side through the proxy pool; private/internal/metadata addresses are SSRF-blocked. Max 25MB.
filenameoptionalOptional original filename — used only as a hint (e.g. .md detection); the real format is always sniffed from magic bytes.
passwordrequiredThe PDF's legitimate password.
Try in playground →
post/file-convert/v1/pdf_repair1 credit

Best-effort structural repair (broken xref/trailer/stream lengths) via a tolerant qpdf parse + clean rewrite. Output delivery: each produced file ≤10MB comes inline as base64 (files[].file_b64); 10-50MB comes as a one-time download token (files[].download_path, 30min TTL); >50MB total is rejected.

ParameterAllowed / rangeDescription
file_b64optionalThe input file as base64 (data-URI prefix tolerated). Max 25MB. Provide file_b64 OR file_url. Multipart upload also works: POST the file as the 'file' form field.
file_urloptionalhttps URL of the input file — fetched server-side through the proxy pool; private/internal/metadata addresses are SSRF-blocked. Max 25MB.
filenameoptionalOptional original filename — used only as a hint (e.g. .md detection); the real format is always sniffed from magic bytes.
passwordoptionalPassword for encrypted PDFs. Without it an encrypted input fails cleanly with INVALID_PARAM (we never crack/bypass).
Try in playground →
post/file-convert/v1/image_convert1 credit

Convert between raster formats (jpg/png/webp/tiff/bmp/gif/avif; animated gif/webp preserved where the target supports it). Output delivery: each produced file ≤10MB comes inline as base64 (files[].file_b64); 10-50MB comes as a one-time download token (files[].download_path, 30min TTL); >50MB total is rejected.

ParameterAllowed / rangeDescription
file_b64optionalThe input file as base64 (data-URI prefix tolerated). Max 25MB. Provide file_b64 OR file_url. Multipart upload also works: POST the file as the 'file' form field.
file_urloptionalhttps URL of the input file — fetched server-side through the proxy pool; private/internal/metadata addresses are SSRF-blocked. Max 25MB.
filenameoptionalOptional original filename — used only as a hint (e.g. .md detection); the real format is always sniffed from magic bytes.
torequiredjpg · png · webp · tiff · bmp · gif · avifTarget format: jpg, png, webp, tiff, bmp, gif, avif.
quality = 85optional1–100Encode quality 1-100 (jpg/webp/avif).
Try in playground →
post/file-convert/v1/image_resize1 credit

Resize with fit=contain (aspect kept, fits inside box) / cover (fills+crops) / stretch. No upscaling unless upscale=true. Output delivery: each produced file ≤10MB comes inline as base64 (files[].file_b64); 10-50MB comes as a one-time download token (files[].download_path, 30min TTL); >50MB total is rejected.

ParameterAllowed / rangeDescription
file_b64optionalThe input file as base64 (data-URI prefix tolerated). Max 25MB. Provide file_b64 OR file_url. Multipart upload also works: POST the file as the 'file' form field.
file_urloptionalhttps URL of the input file — fetched server-side through the proxy pool; private/internal/metadata addresses are SSRF-blocked. Max 25MB.
filenameoptionalOptional original filename — used only as a hint (e.g. .md detection); the real format is always sniffed from magic bytes.
widthoptional1–20000Target width px (give width and/or height).
heightoptional1–20000Target height px.
fit = containoptionalcontain · cover · stretchResize strategy.
upscale = falseoptionalAllow enlarging beyond the source size.
to = optionaljpg · png · webp · tiff · bmp · gif · avifOptional output format (default: keep source).
quality = 85optional1–100Encode quality 1-100 (jpg/webp/avif).
Try in playground →
post/file-convert/v1/image_optimize1 credit

Smart perceptual compression (TinyPNG-style): binary-searches the lowest quality whose decoded result stays visually equal to the source, per a per-channel error budget (effort=low/balanced/strong). Optionally convert to webp/avif while optimizing. Never returns a bigger file. Output delivery: each produced file ≤10MB comes inline as base64 (files[].file_b64); 10-50MB comes as a one-time download token (files[].download_path, 30min TTL); >50MB total is rejected.

ParameterAllowed / rangeDescription
file_b64optionalThe input file as base64 (data-URI prefix tolerated). Max 25MB. Provide file_b64 OR file_url. Multipart upload also works: POST the file as the 'file' form field.
file_urloptionalhttps URL of the input file — fetched server-side through the proxy pool; private/internal/metadata addresses are SSRF-blocked. Max 25MB.
filenameoptionalOptional original filename — used only as a hint (e.g. .md detection); the real format is always sniffed from magic bytes.
to = autooptionalauto · jpg · png · webp · avifauto = keep format (exotic sources → webp).
effort = balancedoptionallow · balanced · strongHow much visual error to allow.
Try in playground →
post/file-convert/v1/image_thumbnail1 credit

Fast thumbnail (16-2048px box; square=true centre-crops to a square). Output delivery: each produced file ≤10MB comes inline as base64 (files[].file_b64); 10-50MB comes as a one-time download token (files[].download_path, 30min TTL); >50MB total is rejected.

ParameterAllowed / rangeDescription
file_b64optionalThe input file as base64 (data-URI prefix tolerated). Max 25MB. Provide file_b64 OR file_url. Multipart upload also works: POST the file as the 'file' form field.
file_urloptionalhttps URL of the input file — fetched server-side through the proxy pool; private/internal/metadata addresses are SSRF-blocked. Max 25MB.
filenameoptionalOptional original filename — used only as a hint (e.g. .md detection); the real format is always sniffed from magic bytes.
size = 256optional16–2048Bounding-box size in px.
square = falseoptionalCentre-crop to square.
to = webpoptionalwebp · jpg · pngThumbnail format.
Try in playground →
post/file-convert/v1/image_metadata1 credit

Read image facts + EXIF (+GPS) — and with strip=true return a copy with ALL metadata removed (EXIF/GPS/XMP/ICC).

ParameterAllowed / rangeDescription
file_b64optionalThe input file as base64 (data-URI prefix tolerated). Max 25MB. Provide file_b64 OR file_url. Multipart upload also works: POST the file as the 'file' form field.
file_urloptionalhttps URL of the input file — fetched server-side through the proxy pool; private/internal/metadata addresses are SSRF-blocked. Max 25MB.
filenameoptionalOptional original filename — used only as a hint (e.g. .md detection); the real format is always sniffed from magic bytes.
strip = falseoptionalAlso return a metadata-stripped copy.
Try in playground →
post/file-convert/v1/image_rotate1 credit

Rotate (90/180/270 clockwise) and/or flip (horizontal/vertical). Output delivery: each produced file ≤10MB comes inline as base64 (files[].file_b64); 10-50MB comes as a one-time download token (files[].download_path, 30min TTL); >50MB total is rejected.

ParameterAllowed / rangeDescription
file_b64optionalThe input file as base64 (data-URI prefix tolerated). Max 25MB. Provide file_b64 OR file_url. Multipart upload also works: POST the file as the 'file' form field.
file_urloptionalhttps URL of the input file — fetched server-side through the proxy pool; private/internal/metadata addresses are SSRF-blocked. Max 25MB.
filenameoptionalOptional original filename — used only as a hint (e.g. .md detection); the real format is always sniffed from magic bytes.
angle = 0optional0 · 90 · 180 · 270Clockwise rotation.
flip = optionalhorizontal · verticalOptional mirror.
Try in playground →
post/file-convert/v1/image_crop1 credit

Crop a pixel box (x, y from top-left + width × height). Output delivery: each produced file ≤10MB comes inline as base64 (files[].file_b64); 10-50MB comes as a one-time download token (files[].download_path, 30min TTL); >50MB total is rejected.

ParameterAllowed / rangeDescription
file_b64optionalThe input file as base64 (data-URI prefix tolerated). Max 25MB. Provide file_b64 OR file_url. Multipart upload also works: POST the file as the 'file' form field.
file_urloptionalhttps URL of the input file — fetched server-side through the proxy pool; private/internal/metadata addresses are SSRF-blocked. Max 25MB.
filenameoptionalOptional original filename — used only as a hint (e.g. .md detection); the real format is always sniffed from magic bytes.
x = 0optional0–Left edge px.
y = 0optional0–Top edge px.
widthrequired1–Crop width px.
heightrequired1–Crop height px.
Try in playground →
post/file-convert/v1/doc_to_markdown4 credits

Document → clean markdown for RAG/agents. PDF uses a layout engine (headings from font sizes, real pipe-tables, reading order); docx/pptx/xlsx/html via MarkItDown. mode=fast trades structure for speed. Output delivery: each produced file ≤10MB comes inline as base64 (files[].file_b64); 10-50MB comes as a one-time download token (files[].download_path, 30min TTL); >50MB total is rejected.

ParameterAllowed / rangeDescription
file_b64optionalThe input file as base64 (data-URI prefix tolerated). Max 25MB. Provide file_b64 OR file_url. Multipart upload also works: POST the file as the 'file' form field.
file_urloptionalhttps URL of the input file — fetched server-side through the proxy pool; private/internal/metadata addresses are SSRF-blocked. Max 25MB.
filenameoptionalOptional original filename — used only as a hint (e.g. .md detection); the real format is always sniffed from magic bytes.
passwordoptionalPassword for encrypted PDFs. Without it an encrypted input fails cleanly with INVALID_PARAM (we never crack/bypass).
pagesoptionalPage selection, 1-based: '1-3,5,9-' (open ranges OK). Default: all pages.
mode = layoutoptionallayout · fastPDF only: layout = headings+tables; fast = plain text spine.
Try in playground →
post/file-convert/v1/extract_tables3 credits

Pull every table out of a PDF / xlsx / docx / html as JSON rows (+optional CSV files). Max 50 tables.

ParameterAllowed / rangeDescription
file_b64optionalThe input file as base64 (data-URI prefix tolerated). Max 25MB. Provide file_b64 OR file_url. Multipart upload also works: POST the file as the 'file' form field.
file_urloptionalhttps URL of the input file — fetched server-side through the proxy pool; private/internal/metadata addresses are SSRF-blocked. Max 25MB.
filenameoptionalOptional original filename — used only as a hint (e.g. .md detection); the real format is always sniffed from magic bytes.
passwordoptionalPassword for encrypted PDFs. Without it an encrypted input fails cleanly with INVALID_PARAM (we never crack/bypass).
pagesoptionalPage selection, 1-based: '1-3,5,9-' (open ranges OK). Default: all pages.
as_csv = falseoptionalAlso return each table as a CSV file.
Try in playground →
post/file-convert/v1/ocr_image2 credits

OCR an image → text + word count + confidence (tesseract 5, printed text; languages: eng/deu/fra/spa/tur, combinable).

ParameterAllowed / rangeDescription
file_b64optionalThe input file as base64 (data-URI prefix tolerated). Max 25MB. Provide file_b64 OR file_url. Multipart upload also works: POST the file as the 'file' form field.
file_urloptionalhttps URL of the input file — fetched server-side through the proxy pool; private/internal/metadata addresses are SSRF-blocked. Max 25MB.
filenameoptionalOptional original filename — used only as a hint (e.g. .md detection); the real format is always sniffed from magic bytes.
language = engoptionalOCR language(s): eng, deu, fra, spa, tur — array or comma-joined.
Try in playground →
post/file-convert/v1/ocr_pdf2 credits

OCR a scanned PDF: output=text → per-page text+confidence; output=searchable_pdf → image+invisible-text-layer PDF. OCR-light: max 10 pages per call (use 'pages' to window). Output delivery: each produced file ≤10MB comes inline as base64 (files[].file_b64); 10-50MB comes as a one-time download token (files[].download_path, 30min TTL); >50MB total is rejected.

ParameterAllowed / rangeDescription
file_b64optionalThe input file as base64 (data-URI prefix tolerated). Max 25MB. Provide file_b64 OR file_url. Multipart upload also works: POST the file as the 'file' form field.
file_urloptionalhttps URL of the input file — fetched server-side through the proxy pool; private/internal/metadata addresses are SSRF-blocked. Max 25MB.
filenameoptionalOptional original filename — used only as a hint (e.g. .md detection); the real format is always sniffed from magic bytes.
passwordoptionalPassword for encrypted PDFs. Without it an encrypted input fails cleanly with INVALID_PARAM (we never crack/bypass).
pagesoptionalPage selection, 1-based: '1-3,5,9-' (open ranges OK). Default: all pages.
language = engoptionalOCR language(s): eng, deu, fra, spa, tur.
output = textoptionaltext · searchable_pdfResult kind.
Try in playground →
post/file-convert/v1/office_convert3 credits

Office → PDF (and html/txt; spreadsheets also → csv; text docs also → docx) via LibreOffice headless — docx/doc/odt/rtf/pptx/ppt/odp/xlsx/xls/ods/html/markdown/txt/csv in. Fonts: Noto (CJK/RTL) + Liberation (Arial/Times metrics). Output delivery: each produced file ≤10MB comes inline as base64 (files[].file_b64); 10-50MB comes as a one-time download token (files[].download_path, 30min TTL); >50MB total is rejected.

ParameterAllowed / rangeDescription
file_b64optionalThe input file as base64 (data-URI prefix tolerated). Max 25MB. Provide file_b64 OR file_url. Multipart upload also works: POST the file as the 'file' form field.
file_urloptionalhttps URL of the input file — fetched server-side through the proxy pool; private/internal/metadata addresses are SSRF-blocked. Max 25MB.
filenameoptionalOptional original filename — used only as a hint (e.g. .md detection); the real format is always sniffed from magic bytes.
to = pdfoptionalpdf · html · txt · csv · docxTarget: pdf (default) | html | txt | csv (spreadsheets only) | docx (text documents only).
from = optionalmdSet from=md when sending markdown (it has no magic bytes; .md filename also works).
Try in playground →
post/file-convert/v1/audio_extract2 credits

Extract the audio track from a video (mp4/webm/mkv/avi) → mp3 (default) / m4a / wav / flac / ogg / opus. Stream-copies losslessly when the codec already matches the target. NOT a video transcoder (phase-2). Output delivery: each produced file ≤10MB comes inline as base64 (files[].file_b64); 10-50MB comes as a one-time download token (files[].download_path, 30min TTL); >50MB total is rejected.

ParameterAllowed / rangeDescription
file_b64optionalThe input file as base64 (data-URI prefix tolerated). Max 25MB. Provide file_b64 OR file_url. Multipart upload also works: POST the file as the 'file' form field.
file_urloptionalhttps URL of the input file — fetched server-side through the proxy pool; private/internal/metadata addresses are SSRF-blocked. Max 25MB.
filenameoptionalOptional original filename — used only as a hint (e.g. .md detection); the real format is always sniffed from magic bytes.
to = mp3optionalmp3 · m4a · wav · flac · ogg · opusAudio output format.
bitrate = optional64k · 96k · 128k · 160k · 192k · 256k · 320kTarget bitrate (forces transcode; default 192k/encoder default).
Try in playground →
post/file-convert/v1/audio_convert2 credits

Convert between audio formats (mp3/wav/flac/ogg/m4a in → mp3/m4a/wav/flac/ogg/opus out; ffmpeg LGPL build). Output delivery: each produced file ≤10MB comes inline as base64 (files[].file_b64); 10-50MB comes as a one-time download token (files[].download_path, 30min TTL); >50MB total is rejected.

ParameterAllowed / rangeDescription
file_b64optionalThe input file as base64 (data-URI prefix tolerated). Max 25MB. Provide file_b64 OR file_url. Multipart upload also works: POST the file as the 'file' form field.
file_urloptionalhttps URL of the input file — fetched server-side through the proxy pool; private/internal/metadata addresses are SSRF-blocked. Max 25MB.
filenameoptionalOptional original filename — used only as a hint (e.g. .md detection); the real format is always sniffed from magic bytes.
torequiredmp3 · m4a · wav · flac · ogg · opusTarget format: mp3, m4a, wav, flac, ogg, opus.
bitrate = optional64k · 96k · 128k · 160k · 192k · 256k · 320kTarget bitrate.
Try in playground →
post/file-convert/v1/media_probe1 credit

ffprobe metadata for any audio/video file: container, duration, bitrate, per-stream codec/sample-rate/resolution, curated tags.

ParameterAllowed / rangeDescription
file_b64optionalThe input file as base64 (data-URI prefix tolerated). Max 25MB. Provide file_b64 OR file_url. Multipart upload also works: POST the file as the 'file' form field.
file_urloptionalhttps URL of the input file — fetched server-side through the proxy pool; private/internal/metadata addresses are SSRF-blocked. Max 25MB.
filenameoptionalOptional original filename — used only as a hint (e.g. .md detection); the real format is always sniffed from magic bytes.
Try in playground →
post/file-convert/v1/data_convert1 credit

Deterministic data-format conversion: CSV ↔ JSON ↔ XML ↔ YAML ↔ Excel(xlsx) (any direction; tabular targets need tabular-shaped input — clean error otherwise). 200k-row cap. Output delivery: each produced file ≤10MB comes inline as base64 (files[].file_b64); 10-50MB comes as a one-time download token (files[].download_path, 30min TTL); >50MB total is rejected.

ParameterAllowed / rangeDescription
file_b64optionalThe input file as base64 (data-URI prefix tolerated). Max 25MB. Provide file_b64 OR file_url. Multipart upload also works: POST the file as the 'file' form field.
file_urloptionalhttps URL of the input file — fetched server-side through the proxy pool; private/internal/metadata addresses are SSRF-blocked. Max 25MB.
filenameoptionalOptional original filename — used only as a hint (e.g. .md detection); the real format is always sniffed from magic bytes.
torequiredcsv · json · xml · yaml · xlsxTarget format: csv, json, xml, yaml, xlsx.
from = optionalcsv · json · xml · yaml · xlsxOptional source override for ambiguous text (e.g. YAML without a leading ---); binary formats are always sniffed.
delimiteroptionalCSV delimiter override (default: sniffed).
sheetoptionalExcel source: sheet name (default: first).
Try in playground →
post/file-convert/v1/formatsfree

Capability matrix: every action with its accepted input formats, targets and caps — machine-readable (the Zamzar /formats equivalent).

Try in playground →