# FileOven API

REST API for PDF operations, document extraction, image processing and data utilities.
99 endpoints. Every call is one shape: `POST https://fileoven.com/api/v1/tools/{slug}`.

## Authentication

Credit-metered endpoints need a bearer token: `Authorization: Bearer sk_live_...`. Generate
keys in the dashboard. Endpoints listed as free need no key and no account.

## Billing

Each endpoint charges a fixed, published number of credits per call, not per file size or per
conversion minute. Credits are refunded automatically when an upstream call fails. The
`x-credits-used` response header reports what a call cost.

## Discovery

- `GET https://fileoven.com/api/v1/tools` - the full catalog as JSON, parameters included
- `GET https://fileoven.com/api/v1/tools/{slug}` - one endpoint's specification
- `POST https://fileoven.com/api/v1/jobs` - run a JSON-input tool asynchronously with a signed webhook

## Errors

- `400` missing or invalid input
- `401` missing or malformed Authorization header
- `402` invalid API key or insufficient credits
- `404` unknown tool slug
- `413` file too large
- `429` rate limited, 60 requests per minute per key; see `Retry-After`
- `501` tool is browser-only, credits refunded
- `502` upstream failure, credits refunded

## Scope

FileOven covers PDF operations, document extraction, image processing and data utilities.
It is not a 200-format transcoder. Video and audio transcoding, 3D scene conversion and OCR run
in the browser on https://fileoven.com and have no server endpoint.

## Documents (36)



### POST /api/v1/tools/bates-numbering

Stamp sequential Bates numbers with a prefix, suffix and zero padding.

- Cost: 3 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The file to process.
- `start` (number, optional, default 1) - The number stamped on the first page.
- `prefix` (string, optional) - Text printed before the Bates number.
- `suffix` (string, optional) - Text printed after the Bates number.
- `padding` (number, optional, default 6) - Zero padding width, 1-12.
- `size` (number, optional, default 10) - Bates label text size, in points.

```bash
curl -X POST https://fileoven.com/api/v1/tools/bates-numbering \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@input.png" \
  -o bates.pdf
```

### POST /api/v1/tools/compare-pdf

Line-level text comparison of two PDFs (file_a, file_b).

- Cost: 3 credits
- Body: multipart/form-data

Parameters:

- `file_a` (file, required) - The baseline PDF. Lines present here but not in file_b are reported as removed.
- `file_b` (file, required) - The revised PDF. Lines only in this file are reported as added.

```bash
curl -X POST https://fileoven.com/api/v1/tools/compare-pdf \
  -H "Authorization: Bearer sk_live_..." \
  -F "file_a=@input.pdf" \
  -F "file_b=@input.pdf"
```

### POST /api/v1/tools/crop-pdf

Trim page margins by insetting the MediaBox, in points.

- Cost: 2 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The file to process.
- `top` (number, optional, default 0) - Inset from the top, in points.
- `right` (number, optional, default 0) - Inset from the right.
- `bottom` (number, optional, default 0) - Inset from the bottom.
- `left` (number, optional, default 0) - Inset from the left.
- `pages` (string, optional, default all) - Page range, e.g. "1,3,5-7". Omit for every page.

```bash
curl -X POST https://fileoven.com/api/v1/tools/crop-pdf \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@input.pdf" \
  -o cropped.pdf
```

### POST /api/v1/tools/epub-to-pdf

Render an EPUB to PDF, following the spine order.

- Cost: 4 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The file to process.

```bash
curl -X POST https://fileoven.com/api/v1/tools/epub-to-pdf \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@input.epub" \
  -o book.pdf
```

### POST /api/v1/tools/excel-to-pdf

Render a workbook to PDF, one sheet per section, as a monospaced grid.

- Cost: 4 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The file to process.

```bash
curl -X POST https://fileoven.com/api/v1/tools/excel-to-pdf \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@input.xlsx" \
  -o spreadsheet.pdf
```

### POST /api/v1/tools/extract-pdf-pages

Extract selected pages into one PDF or a ZIP.

- Cost: 3 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The file to process.
- `pages` (string, required, default all) - Page range, e.g. "1,3,5-7". Omit for every page.
- `mode` (string, optional, default single) - single for one PDF, zip for one file per page.

```bash
curl -X POST https://fileoven.com/api/v1/tools/extract-pdf-pages \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@input.pdf" \
  -F "pages=1-3" \
  -o extracted.pdf
```

### POST /api/v1/tools/flatten-pdf

Flatten interactive form fields into static page content.

- Cost: 2 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The file to process.

```bash
curl -X POST https://fileoven.com/api/v1/tools/flatten-pdf \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@input.pdf" \
  -o flattened.pdf
```

### POST /api/v1/tools/image-to-pdf

Combine images into a PDF.

- Cost: 3 credits
- Body: multipart/form-data

Parameters:

- `files` (file[], required) - One or more images, 15 MB each.

```bash
curl -X POST https://fileoven.com/api/v1/tools/image-to-pdf \
  -H "Authorization: Bearer sk_live_..." \
  -F "files=@input.pdf" -F "files=@second-input.pdf" \
  -o images.pdf
```

### POST /api/v1/tools/markdown-to-pdf

Render Markdown to a paginated PDF with wrapped text.

- Cost: 3 credits
- Body: multipart/form-data

Parameters:

- `markdown` (string, required) - Markdown source, as a field or a file.

```bash
curl -X POST https://fileoven.com/api/v1/tools/markdown-to-pdf \
  -H "Authorization: Bearer sk_live_..." \
  -F "markdown=# Title" \
  -o document.pdf
```

### POST /api/v1/tools/ocr-pdf

OCR a scanned PDF to text with tesseract, up to 10 pages per call.

- Cost: 5 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The file to process.
- `pages` (string, optional, default all) - Page range, e.g. "1,3,5-7". Omit for every page.
- `language` (string, optional, default eng) - Tesseract language codes, e.g. "eng" or "eng+deu".
- `password` (string, optional) - Required only if the PDF is encrypted.

```bash
curl -X POST https://fileoven.com/api/v1/tools/ocr-pdf \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@input.pdf"
```

### POST /api/v1/tools/pdf-compress

Rebuild PDF with object streams; strip metadata.

- Cost: 2 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The file to process.

```bash
curl -X POST https://fileoven.com/api/v1/tools/pdf-compress \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@input.pdf" \
  -o compressed.pdf
```

### POST /api/v1/tools/pdf-extract

Extract text, reconstructed tables, and document metadata as structured JSON. Sets needs_ocr when the PDF is scanned images.

- Cost: 5 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The file to process.
- `pages` (string, optional, default all) - Page range, e.g. "1,3,5-7". Omit for every page.
- `geometry` (boolean, optional, default false) - Include per-line y and per-cell x coordinates.

```bash
curl -X POST https://fileoven.com/api/v1/tools/pdf-extract \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@input.pdf"
```

### POST /api/v1/tools/pdf-forms

List a PDF's form fields, or fill them from a JSON map and optionally flatten.

- Cost: 3 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The file to process.
- `fields` (string, optional) - JSON object of fieldName to value. Omit to list the fields instead.
- `flatten` (boolean, optional, default false) - Flatten after filling so values cannot be edited.

```bash
curl -X POST https://fileoven.com/api/v1/tools/pdf-forms \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@input.pdf" \
  -F 'fields={"applicant.name":"Ada Lovelace"}' \
  -o filled.pdf
```

### POST /api/v1/tools/pdf-info

Read document properties, page count, and page size without a full text pass.

- Cost: 1 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The file to process.

```bash
curl -X POST https://fileoven.com/api/v1/tools/pdf-info \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@input.pdf"
```

### POST /api/v1/tools/pdf-merge

Merge multiple PDFs into one.

- Cost: 3 credits
- Body: multipart/form-data

Parameters:

- `files` (file[], required) - Two or more PDFs, in order.

```bash
curl -X POST https://fileoven.com/api/v1/tools/pdf-merge \
  -H "Authorization: Bearer sk_live_..." \
  -F "files=@input.pdf" -F "files=@second-input.pdf" \
  -o merged.pdf
```

### POST /api/v1/tools/pdf-page-numbers

Add page numbers to all or selected PDF pages.

- Cost: 2 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The file to process.
- `start` (number, optional, default 1) - The number to print on the first page.
- `position` (string, optional, default bottom-center) - top/bottom paired with left/center/right.
- `font_size` (number, optional, default 10) - Page-number text size, in points.
- `pages` (string, optional, default all) - Page range, e.g. "1,3,5-7". Omit for every page.

```bash
curl -X POST https://fileoven.com/api/v1/tools/pdf-page-numbers \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@input.pdf" \
  -o numbered.pdf
```

### POST /api/v1/tools/pdf-password-remove

Remove encryption from a PDF you have the password for. Requires the correct password; this is not a cracker.

- Cost: 3 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The file to process.
- `password` (string, required) - The password that opens the document.

```bash
curl -X POST https://fileoven.com/api/v1/tools/pdf-password-remove \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@input.pdf" \
  -F "password=your-password"
```

### POST /api/v1/tools/pdf-reorder

Reorder or subset pages with an explicit 1-indexed page sequence.

- Cost: 3 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The file to process.
- `order` (string, required) - 1-indexed sequence, e.g. "3,1,2". Doubles as page removal.

```bash
curl -X POST https://fileoven.com/api/v1/tools/pdf-reorder \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@input.pdf" \
  -F "order=3,1,2" \
  -o reordered.pdf
```

### POST /api/v1/tools/pdf-rotate

Rotate selected pages by a multiple of 90 degrees.

- Cost: 2 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The file to process.
- `angle` (number, optional, default 90) - A multiple of 90.
- `pages` (string, optional, default all) - Page range, e.g. "1,3,5-7". Omit for every page.

```bash
curl -X POST https://fileoven.com/api/v1/tools/pdf-rotate \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@input.pdf" \
  -o rotated.pdf
```

### POST /api/v1/tools/pdf-split

Split a PDF into one file per page (zip).

- Cost: 3 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The file to process.

```bash
curl -X POST https://fileoven.com/api/v1/tools/pdf-split \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@input.pdf" \
  -o pages.zip
```

### POST /api/v1/tools/pdf-to-epub

Convert a text-layer PDF to a reflowable EPUB, one chapter per page.

- Cost: 4 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The file to process.

```bash
curl -X POST https://fileoven.com/api/v1/tools/pdf-to-epub \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@input.pdf" \
  -o book.epub
```

### POST /api/v1/tools/pdf-to-excel

Extract detected tables to XLSX, one sheet per table.

- Cost: 4 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The file to process.
- `pages` (string, optional, default all) - Page range, e.g. "1,3,5-7". Omit for every page.

```bash
curl -X POST https://fileoven.com/api/v1/tools/pdf-to-excel \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@input.pdf" \
  -o extracted.xlsx
```

### POST /api/v1/tools/pdf-to-image

Render one PDF page to PNG at a chosen scale.

- Cost: 3 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The file to process.
- `page` (number, optional, default 1) - 1-indexed page to render.
- `scale` (number, optional, default 2) - Render scale, up to 4. 2 is roughly 144 dpi.
- `password` (string, optional) - Required only if the PDF is encrypted.

```bash
curl -X POST https://fileoven.com/api/v1/tools/pdf-to-image \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@input.pdf"
```

### POST /api/v1/tools/pdf-to-images-zip

Render a range of PDF pages to PNGs, returned as a ZIP.

- Cost: 4 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The file to process.
- `pages` (string, optional, default all) - Page range, e.g. "1,3,5-7". Omit for every page.
- `scale` (number, optional, default 2) - Render scale, up to 4.
- `password` (string, optional) - Required only if the PDF is encrypted.

```bash
curl -X POST https://fileoven.com/api/v1/tools/pdf-to-images-zip \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@input.pdf"
```

### POST /api/v1/tools/pdf-to-md

Extract text as Markdown, with detected tables as GFM pipe tables.

- Cost: 3 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The file to process.
- `pages` (string, optional, default all) - Page range, e.g. "1,3,5-7". Omit for every page.

```bash
curl -X POST https://fileoven.com/api/v1/tools/pdf-to-md \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@input.pdf"
```

### POST /api/v1/tools/pdf-to-pdfa

Tag a PDF with PDF/A-2b metadata and an sRGB output intent. Content is not re-encoded.

- Cost: 4 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The file to process.
- `title` (string, optional) - Document title for the XMP metadata.

```bash
curl -X POST https://fileoven.com/api/v1/tools/pdf-to-pdfa \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@input.pdf" \
  -o pdfa.pdf
```

### POST /api/v1/tools/pdf-to-text

Extract plain text, in reading order, for search indexing and RAG chunking.

- Cost: 2 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The file to process.
- `pages` (string, optional, default all) - Page range, e.g. "1,3,5-7". Omit for every page.

```bash
curl -X POST https://fileoven.com/api/v1/tools/pdf-to-text \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@input.pdf"
```

### POST /api/v1/tools/pdf-to-word

Extract text and tables to DOCX as real paragraphs and Word tables.

- Cost: 4 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The file to process.
- `pages` (string, optional, default all) - Page range, e.g. "1,3,5-7". Omit for every page.

```bash
curl -X POST https://fileoven.com/api/v1/tools/pdf-to-word \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@input.pdf" \
  -o extracted.docx
```

### POST /api/v1/tools/pdf-watermark

Add a positioned text watermark to selected PDF pages.

- Cost: 3 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The file to process.
- `text` (string, required) - Watermark text.
- `position` (string, optional, default center) - Nine-point grid, e.g. top-left, center, bottom-right.
- `opacity` (number, optional, default 0.3) - Watermark opacity, 0 (invisible) to 1 (solid).
- `font_size` (number, optional, default 48) - Watermark text size, in points.
- `rotation` (number, optional, default 45) - Rotation of the watermark text, in degrees.
- `color` (string, optional, default #888888) - Watermark text colour, as hex.
- `font` (string, optional, default helvetica) - helvetica, times or courier.
- `pages` (string, optional, default all) - Page range, e.g. "1,3,5-7". Omit for every page.

```bash
curl -X POST https://fileoven.com/api/v1/tools/pdf-watermark \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@input.pdf" \
  -F "text=hello world" \
  -o watermarked.pdf
```

### POST /api/v1/tools/protect-pdf

Encrypt a PDF with AES-256 or RC4 and set permission flags.

- Cost: 3 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The file to process.
- `password` (string, required) - User password, at least 4 characters.
- `owner_password` (string, optional) - Permissions password. Defaults to the user password.
- `algorithm` (string, optional, default aes256) - aes256 or rc4.
- `allow_printing` (boolean, optional, default false) - Permissions default to denied.
- `allow_copying` (boolean, optional, default false) - Allow text copying.
- `allow_modifying` (boolean, optional, default false) - Allow edits.
- `allow_annotating` (boolean, optional, default false) - Allow annotations.
- `allow_filling_forms` (boolean, optional, default false) - Allow form filling.
- `allow_extraction` (boolean, optional, default false) - Allow accessibility extraction.
- `allow_assembly` (boolean, optional, default false) - Allow page assembly.
- `allow_high_quality_print` (boolean, optional, default false) - Allow high-resolution printing.

```bash
curl -X POST https://fileoven.com/api/v1/tools/protect-pdf \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@input.pdf" \
  -F "password=your-password" \
  -o protected.pdf
```

### POST /api/v1/tools/redact-pdf

Redact regions by rasterizing each page and painting boxes over them, which removes the underlying text rather than hiding it.

- Cost: 4 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The file to process.
- `regions` (string, required) - JSON array of regions in 0-1 page coordinates, measured from the top-left.
- `scale` (number, optional, default 2) - Raster scale of the output pages, up to 4.
- `password` (string, optional) - Required only if the PDF is encrypted.

```bash
curl -X POST https://fileoven.com/api/v1/tools/redact-pdf \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@input.pdf" \
  -F 'regions=[{"page":1,"x":0.1,"y":0.1,"width":0.3,"height":0.05}]'
```

### POST /api/v1/tools/repair-pdf

Rebuild a damaged PDF, dropping unreadable objects.

- Cost: 3 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The file to process.

```bash
curl -X POST https://fileoven.com/api/v1/tools/repair-pdf \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@input.pdf" \
  -o repaired.pdf
```

### POST /api/v1/tools/sign-pdf

Stamp a signature image onto a page at a given position and width.

- Cost: 3 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The file to process.
- `signature` (file, required) - PNG or JPEG signature image.
- `page` (number, optional, default last) - 1-indexed target page.
- `x` (number, optional) - Left offset in points. Defaults to the bottom right.
- `y` (number, optional, default 48) - Bottom offset in points.
- `width` (number, optional, default 150) - Signature width. Height follows the aspect ratio.
- `opacity` (number, optional, default 1) - Signature opacity, 0 (invisible) to 1 (solid).

```bash
curl -X POST https://fileoven.com/api/v1/tools/sign-pdf \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@input.pdf" \
  -F "signature=@input.pdf" \
  -o signed.pdf
```

### POST /api/v1/tools/word-html

Convert a .docx to semantic HTML, keeping headings, lists and tables.

- Cost: 2 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The file to process.

```bash
curl -X POST https://fileoven.com/api/v1/tools/word-html \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@input.docx"
```

### POST /api/v1/tools/word-text

Extract plain text from a .docx.

- Cost: 2 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The file to process.

```bash
curl -X POST https://fileoven.com/api/v1/tools/word-text \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@input.docx"
```

### POST /api/v1/tools/word-to-pdf

Render a .docx to a paginated PDF via its extracted text.

- Cost: 4 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The file to process.

```bash
curl -X POST https://fileoven.com/api/v1/tools/word-to-pdf \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@input.docx" \
  -o document.pdf
```

## Image (17)



### POST /api/v1/tools/color-palette

Extract dominant colors from an image.

- Cost: 1 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The file to process.
- `count` (number, optional, default 6) - How many dominant colours.

```bash
curl -X POST https://fileoven.com/api/v1/tools/color-palette \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@input.png"
```

### POST /api/v1/tools/ecommerce-image-batch

Fit or fill a batch of product images onto one marketplace canvas size with padding and a background colour, returned as a ZIP.

- Cost: 3 credits
- Body: multipart/form-data

Parameters:

- `files` (file[], required) - Up to 50 images, 40 MB total.
- `width` (number, optional, default 2000) - Canvas width, 1-5000.
- `height` (number, optional, default 2000) - Canvas height, 1-5000.
- `mode` (string, optional, default contain) - contain fits inside; cover fills and crops.
- `padding` (number, optional, default 0.05) - Margin as a fraction of the canvas, 0 to 0.5.
- `background` (string, optional, default #ffffff) - Hex background colour.
- `format` (string, optional, default jpeg) - jpeg, png or webp.
- `quality` (number, optional, default 88) - Encoder quality, 1-100.

```bash
curl -X POST https://fileoven.com/api/v1/tools/ecommerce-image-batch \
  -H "Authorization: Bearer sk_live_..." \
  -F "files=@input.png" -F "files=@second-input.png" \
  -o product-images.zip
```

### POST /api/v1/tools/exif-remove

Strip EXIF/GPS metadata.

- Cost: 1 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The file to process.

```bash
curl -X POST https://fileoven.com/api/v1/tools/exif-remove \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@input.png" \
  -o clean.jpg
```

### POST /api/v1/tools/favicon-generator

Build a multi-size favicon.ico.

- Cost: 2 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The file to process.

```bash
curl -X POST https://fileoven.com/api/v1/tools/favicon-generator \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@input.png" \
  -o favicon.ico
```

### POST /api/v1/tools/heic-to-jpg

Convert an iPhone HEIC/HEIF photo to JPEG, PNG or WebP.

- Cost: 2 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The file to process.
- `format` (string, optional, default jpeg) - Output format: jpeg, png or webp.
- `quality` (number, optional, default 88) - Encoder quality, 1-100. Ignored for PNG.

```bash
curl -X POST https://fileoven.com/api/v1/tools/heic-to-jpg \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@input.png"
```

### POST /api/v1/tools/ico-to-png

Extract the largest PNG-encoded image from an .ico file.

- Cost: 2 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The file to process.

```bash
curl -X POST https://fileoven.com/api/v1/tools/ico-to-png \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@favicon.ico" \
  -o icon.png
```

### POST /api/v1/tools/image-compress

Re-encode with quality control.

- Cost: 2 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The file to process.
- `quality` (number, optional, default 80) - Encoder quality, 1-100. Ignored for PNG.
- `format` (string, optional, default png) - Output format: jpg, png or webp.

```bash
curl -X POST https://fileoven.com/api/v1/tools/image-compress \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@input.png" \
  -o compressed.jpg
```

### POST /api/v1/tools/image-converter

Convert JPG / PNG / WebP.

- Cost: 2 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The file to process.
- `format` (string, required) - Output format: jpg, png or webp.
- `quality` (number, optional, default 85) - Encoder quality, 1-100. Ignored for PNG.

```bash
curl -X POST https://fileoven.com/api/v1/tools/image-converter \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@input.png" \
  -F "format=webp" \
  -o converted.png
```

### POST /api/v1/tools/image-crop

Crop an image to a pixel rectangle.

- Cost: 2 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The file to process.
- `x` (number, optional, default 0) - Left offset of the crop origin, in px.
- `y` (number, optional, default 0) - Top offset of the crop origin, in px.
- `width` (number, optional) - Crop width in px, clamped to the image bounds.
- `height` (number, optional) - Crop height in px, clamped to the image bounds.
- `format` (string, optional, default png) - Output format: jpg, png or webp.
- `quality` (number, optional, default 90) - Encoder quality, 1-100. Ignored for PNG.

```bash
curl -X POST https://fileoven.com/api/v1/tools/image-crop \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@input.png" \
  -o cropped.png
```

### POST /api/v1/tools/image-exif

Read EXIF/IPTC/XMP metadata.

- Cost: 1 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The file to process.

```bash
curl -X POST https://fileoven.com/api/v1/tools/image-exif \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@input.png"
```

### POST /api/v1/tools/image-resize

Resize an image.

- Cost: 2 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The file to process.
- `width` (number, optional) - Target width in px. Supply width, height, or both.
- `height` (number, optional) - Target height in px. Aspect ratio is kept when only one is given.
- `format` (string, optional, default png) - Output format: jpg, png or webp.
- `quality` (number, optional, default 90) - Encoder quality, 1-100. Ignored for PNG.

```bash
curl -X POST https://fileoven.com/api/v1/tools/image-resize \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@input.png" \
  -o resized.png
```

### POST /api/v1/tools/image-to-svg

Trace a raster image into vector paths. Best on flat art, not photographs.

- Cost: 3 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The file to process.
- `colors` (number, optional, default 12) - Palette size, 2-64. Source capped at 4 megapixels.

```bash
curl -X POST https://fileoven.com/api/v1/tools/image-to-svg \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@input.png" \
  -o traced.svg
```

### POST /api/v1/tools/image-watermark

Stamp a text watermark onto an image, positioned on a nine-point grid.

- Cost: 2 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The file to process.
- `text` (string, required) - Watermark text, up to 200 characters.
- `position` (string, optional, default bottom-right) - Nine-point grid: top/center/bottom paired with left/center/right.
- `size` (number, optional) - Type size in px. Defaults to a proportion of the image.
- `color` (string, optional, default #ffffff) - Text colour as hex.
- `opacity` (number, optional, default 0.5) - Text opacity, 0 to 1.
- `rotation` (number, optional, default 0) - Rotation of the watermark, in degrees.
- `margin` (number, optional) - Inset from the edges in px. Defaults to 0.75x the type size.
- `format` (string, optional, default png) - Output format: png, jpg or webp.
- `quality` (number, optional, default 90) - Encoder quality for jpg and webp, 1-100.

```bash
curl -X POST https://fileoven.com/api/v1/tools/image-watermark \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@input.png" \
  -F "text=FileOven"
```

### POST /api/v1/tools/meme-generator

Add top and bottom meme captions with a black outline.

- Cost: 2 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The file to process.
- `top` (string, optional) - Top caption. Provide top, bottom, or both.
- `bottom` (string, optional) - Bottom caption, up to 120 characters.
- `size` (number, optional) - Caption size in px. Defaults to a tenth of the image height.

```bash
curl -X POST https://fileoven.com/api/v1/tools/meme-generator \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@input.png"
```

### POST /api/v1/tools/svg-to-png

Rasterize an SVG to PNG. External references are not fetched.

- Cost: 2 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The SVG document to rasterize.
- `width` (number, optional) - Render width in px, 1-8000. Defaults to the SVG's own size.

```bash
curl -X POST https://fileoven.com/api/v1/tools/svg-to-png \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@input.png"
```

### POST /api/v1/tools/upscale-image

Enlarge 2x, 3x or 4x with bilinear interpolation. Not a neural upscaler.

- Cost: 2 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The file to process.
- `scale` (number, optional, default 2) - 2, 3 or 4. Bilinear interpolation, not a neural upscaler.
- `format` (string, optional, default png) - Output format: jpg, png or webp.
- `quality` (number, optional, default 90) - Encoder quality, 1-100. Ignored for PNG.

```bash
curl -X POST https://fileoven.com/api/v1/tools/upscale-image \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@input.png" \
  -o upscaled.png
```

### POST /api/v1/tools/webp-converter

Encode any supported image as WebP.

- Cost: 2 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The file to process.
- `quality` (number, optional, default 82) - Encoder quality, 1-100. Ignored for PNG.

```bash
curl -X POST https://fileoven.com/api/v1/tools/webp-converter \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@input.png" \
  -o converted.webp
```

## Utility (36)



### POST /api/v1/tools/barcode-generator

Generate a Code 128 barcode as SVG.

- Cost: free, no API key required
- Body: application/json

Parameters:

- `text` (string, required) - Printable ASCII, up to 80 characters.
- `height` (number, optional, default 100) - Barcode height in px, 20-400.
- `module_width` (number, optional, default 2) - Narrow-bar width in px, 1-8.

```bash
curl -X POST https://fileoven.com/api/v1/tools/barcode-generator \
  -H "Content-Type: application/json" \
  -d '{"text":"hello world"}'
```

### POST /api/v1/tools/base-converter

Convert a number between bases 2-36, using BigInt so large values keep precision.

- Cost: free, no API key required
- Body: application/json

Parameters:

- `value` (string, required) - The number, as a string.
- `from` (number, required) - Source base, 2-36.
- `to` (number, required) - Target base, 2-36.

```bash
curl -X POST https://fileoven.com/api/v1/tools/base-converter \
  -H "Content-Type: application/json" \
  -d '{"value":"255","from":null,"to":1}'
```

### POST /api/v1/tools/base64

Base64 encode / decode.

- Cost: free, no API key required
- Body: application/json

Parameters:

- `text` (string, required) - Text to encode, or base64 to decode.
- `mode` (string, required) - Whether to encode or decode the text.

```bash
curl -X POST https://fileoven.com/api/v1/tools/base64 \
  -H "Content-Type: application/json" \
  -d '{"text":"hello world","mode":"encode"}'
```

### POST /api/v1/tools/case-converter

Convert between lower, upper, title, sentence, camel, pascal, snake, kebab, constant.

- Cost: free, no API key required
- Body: application/json

Parameters:

- `text` (string, required) - The text to change the case of.
- `case` (string, required) - lower, upper, title, sentence, camel, pascal, snake, kebab or constant.

```bash
curl -X POST https://fileoven.com/api/v1/tools/case-converter \
  -H "Content-Type: application/json" \
  -d '{"text":"hello world","case":"snake"}'
```

### POST /api/v1/tools/color-converter

Convert HEX / RGB / HSL.

- Cost: free, no API key required
- Body: application/json

Parameters:

- `hex` (string, optional) - Hex colour, e.g. "#3b82f6". Supply exactly one of hex, rgb or hsl.
- `rgb` (json, optional) - RGB triple, e.g. [59, 130, 246].
- `hsl` (json, optional) - HSL triple, e.g. [217, 91, 60].

```bash
curl -X POST https://fileoven.com/api/v1/tools/color-converter \
  -H "Content-Type: application/json" \
  -d '{"hex":"#3b82f6"}'
```

### POST /api/v1/tools/contrast-checker

WCAG contrast ratio with AA/AAA pass flags.

- Cost: free, no API key required
- Body: application/json

Parameters:

- `foreground` (string, required) - Colour as a hex string, e.g. #1a1a1a.
- `background` (string, required) - Colour as a hex string, e.g. #1a1a1a.
- `font_size` (number, optional, default 16) - Font size in px, for the large-text threshold.
- `bold` (boolean, optional, default false) - Whether the text is bold.

```bash
curl -X POST https://fileoven.com/api/v1/tools/contrast-checker \
  -H "Content-Type: application/json" \
  -d '{"foreground":"#111111","background":"#ffffff"}'
```

### POST /api/v1/tools/cron-parser

Describe a cron expression in plain English.

- Cost: free, no API key required
- Body: application/json

Parameters:

- `expression` (string, required) - A cron expression, e.g. "0 9 * * 1-5".

```bash
curl -X POST https://fileoven.com/api/v1/tools/cron-parser \
  -H "Content-Type: application/json" \
  -d '{"expression":"0 9 * * 1-5"}'
```

### POST /api/v1/tools/csv-cleaner

Normalize, deduplicate, validate, and safely export CSV data.

- Cost: 1 credits
- Body: application/json

Parameters:

- `csv` (string, required) - The CSV document to clean.
- `options` (json, optional) - Trim, deduplicate and normalization flags.
- `validation` (json, optional) - { column, rule } to flag invalid rows.

```bash
curl -X POST https://fileoven.com/api/v1/tools/csv-cleaner \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{"csv":"name,qty\nwidget,3"}'
```

### POST /api/v1/tools/csv-diff

Row-level diff of two CSV documents.

- Cost: free, no API key required
- Body: application/json

Parameters:

- `a` (string, required) - The baseline CSV document.
- `b` (string, required) - The revised CSV to compare against the first.

```bash
curl -X POST https://fileoven.com/api/v1/tools/csv-diff \
  -H "Content-Type: application/json" \
  -d '{"a":"one\ntwo","b":"one\ntwo point five"}'
```

### POST /api/v1/tools/csv-excel

CSV to XLSX, or XLSX to CSV.

- Cost: 2 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The file to process.
- `to` (string, optional, default xlsx) - xlsx or csv.
- `sheet` (string, optional) - Sheet name when converting to CSV. Defaults to the first.

```bash
curl -X POST https://fileoven.com/api/v1/tools/csv-excel \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@input.csv" \
  -F "to=xlsx" \
  -o converted.xlsx
```

### POST /api/v1/tools/hash-generator

SHA-1/256/384/512 digest of a string, as hex.

- Cost: free, no API key required
- Body: application/json

Parameters:

- `text` (string, required) - The text to compute a digest for.
- `algorithm` (string, optional, default sha-256) - sha-1, sha-256, sha-384 or sha-512. MD5 is not offered.

```bash
curl -X POST https://fileoven.com/api/v1/tools/hash-generator \
  -H "Content-Type: application/json" \
  -d '{"text":"hello world"}'
```

### POST /api/v1/tools/json-csv

JSON ↔ CSV conversion.

- Cost: free, no API key required
- Body: application/json

Parameters:

- `direction` (string, required) - json2csv or csv2json.
- `data` (json, required) - An array of objects for json2csv, or a CSV string for csv2json.

```bash
curl -X POST https://fileoven.com/api/v1/tools/json-csv \
  -H "Content-Type: application/json" \
  -d '{"direction":"json2csv","data":[{"name":"Ada","qty":2}]}'
```

### POST /api/v1/tools/json-diff

Structural, key-path level diff of two JSON values.

- Cost: free, no API key required
- Body: application/json

Parameters:

- `a` (json, required) - The baseline value.
- `b` (json, required) - The value to compare the first against.

```bash
curl -X POST https://fileoven.com/api/v1/tools/json-diff \
  -H "Content-Type: application/json" \
  -d '{"a":{"version":1,"active":true},"b":{"version":2,"active":true}}'
```

### POST /api/v1/tools/json-formatter

Pretty-print or minify a JSON document.

- Cost: free, no API key required
- Body: application/json

Parameters:

- `json` (string, required) - The JSON document to format.
- `indent` (number, optional, default 2) - Indent width, 0-8.
- `minify` (boolean, optional, default false) - Minify instead of pretty-printing.

```bash
curl -X POST https://fileoven.com/api/v1/tools/json-formatter \
  -H "Content-Type: application/json" \
  -d '{"json":"{\"id\":1,\"name\":\"Ada\"}"}'
```

### POST /api/v1/tools/json-to-ts

Generate TypeScript interfaces from a JSON sample.

- Cost: free, no API key required
- Body: application/json

Parameters:

- `json` (string, required) - A representative JSON sample to generate types from.
- `name` (string, optional, default Root) - Name for the root interface.

```bash
curl -X POST https://fileoven.com/api/v1/tools/json-to-ts \
  -H "Content-Type: application/json" \
  -d '{"json":"{\"id\":1,\"name\":\"Ada\"}"}'
```

### POST /api/v1/tools/jwt-decoder

Decode JWT header and payload, with expiry. Does not verify the signature.

- Cost: free, no API key required
- Body: application/json

Parameters:

- `token` (string, required) - The JWT. The signature is not verified.

```bash
curl -X POST https://fileoven.com/api/v1/tools/jwt-decoder \
  -H "Content-Type: application/json" \
  -d '{"token":"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxIn0.sig"}'
```

### POST /api/v1/tools/lorem-ipsum

Generate placeholder paragraphs.

- Cost: free, no API key required
- Body: application/json

Parameters:

- `paragraphs` (number, optional, default 3) - How many paragraphs, 1-50.
- `sentences` (number, optional, default 4) - Sentences per paragraph, 1-20.

```bash
curl -X POST https://fileoven.com/api/v1/tools/lorem-ipsum \
  -H "Content-Type: application/json" \
  -d '{"paragraphs":3,"sentences":4}'
```

### POST /api/v1/tools/markdown-html

Render Markdown to HTML.

- Cost: free, no API key required
- Body: application/json

Parameters:

- `markdown` (string, required) - The Markdown to render as HTML.

```bash
curl -X POST https://fileoven.com/api/v1/tools/markdown-html \
  -H "Content-Type: application/json" \
  -d '{"markdown":"# Title"}'
```

### POST /api/v1/tools/markdown-table

Align a Markdown table's columns.

- Cost: free, no API key required
- Body: application/json

Parameters:

- `markdown` (string, required) - A Markdown table to align.

```bash
curl -X POST https://fileoven.com/api/v1/tools/markdown-table \
  -H "Content-Type: application/json" \
  -d '{"markdown":"# Title"}'
```

### POST /api/v1/tools/minifier

Minify JavaScript (terser), CSS, or HTML.

- Cost: free, no API key required
- Body: application/json

Parameters:

- `code` (string, required) - The source code to minify.
- `language` (string, optional, default js) - js, css or html.

```bash
curl -X POST https://fileoven.com/api/v1/tools/minifier \
  -H "Content-Type: application/json" \
  -d '{"code":"const a = 1;"}'
```

### POST /api/v1/tools/password-generator

Generate passwords from a chosen character set, with an entropy estimate.

- Cost: free, no API key required
- Body: application/json

Parameters:

- `length` (number, optional, default 20) - Password length, 8-256.
- `count` (number, optional, default 1) - How many passwords, 1-100.
- `lower` (boolean, optional, default true) - Include lowercase letters.
- `upper` (boolean, optional, default true) - Include uppercase letters.
- `digits` (boolean, optional, default true) - Include digits.
- `symbols` (boolean, optional, default false) - Include punctuation.

```bash
curl -X POST https://fileoven.com/api/v1/tools/password-generator \
  -H "Content-Type: application/json" \
  -d '{"length":20,"count":1}'
```

### POST /api/v1/tools/qr-generator

Generate a QR code (PNG data URL or SVG).

- Cost: free, no API key required
- Body: application/json

Parameters:

- `text` (string, required) - The text or URL to encode in the QR code.
- `format` (string, optional, default png) - png (data URL) or svg.
- `size` (number, optional, default 256) - QR code size, in pixels.
- `margin` (number, optional, default 4) - Quiet-zone width in modules.

```bash
curl -X POST https://fileoven.com/api/v1/tools/qr-generator \
  -H "Content-Type: application/json" \
  -d '{"text":"hello world"}'
```

### POST /api/v1/tools/slug-generator

URL-safe slug, with accents folded rather than dropped.

- Cost: free, no API key required
- Body: application/json

Parameters:

- `text` (string, required) - The text to turn into a URL-safe slug.
- `separator` (string, optional, default -) - Single separator character.

```bash
curl -X POST https://fileoven.com/api/v1/tools/slug-generator \
  -H "Content-Type: application/json" \
  -d '{"text":"hello world"}'
```

### POST /api/v1/tools/sql-formatter

Pretty-print SQL for a chosen dialect.

- Cost: free, no API key required
- Body: application/json

Parameters:

- `sql` (string, required) - The SQL query to format.
- `dialect` (string, optional, default sql) - sql, postgresql, mysql, sqlite, bigquery and others.

```bash
curl -X POST https://fileoven.com/api/v1/tools/sql-formatter \
  -H "Content-Type: application/json" \
  -d '{"sql":"select id, name from users where active = 1"}'
```

### POST /api/v1/tools/subnet-calculator

CIDR network, broadcast, mask, host range and counts.

- Cost: free, no API key required
- Body: application/json

Parameters:

- `cidr` (string, required) - CIDR block, e.g. "192.168.1.0/24".

```bash
curl -X POST https://fileoven.com/api/v1/tools/subnet-calculator \
  -H "Content-Type: application/json" \
  -d '{"cidr":"192.168.1.0/24"}'
```

### POST /api/v1/tools/text-diff

Line-level LCS diff of two texts, up to 5,000 lines a side.

- Cost: free, no API key required
- Body: application/json

Parameters:

- `a` (string, required) - The baseline text, up to 5,000 lines.
- `b` (string, required) - The revised text to compare against the first.

```bash
curl -X POST https://fileoven.com/api/v1/tools/text-diff \
  -H "Content-Type: application/json" \
  -d '{"a":"one\ntwo","b":"one\ntwo point five"}'
```

### POST /api/v1/tools/text-encrypt

AES-GCM encrypt or decrypt a string with a password-derived key.

- Cost: 1 credits
- Body: application/json

Parameters:

- `text` (string, optional) - Plaintext to encrypt. Supply text or ciphertext.
- `ciphertext` (string, optional) - Ciphertext to decrypt.
- `password` (string, required) - At least 8 characters.

```bash
curl -X POST https://fileoven.com/api/v1/tools/text-encrypt \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{"text":"hello world","password":"your-password"}'
```

### POST /api/v1/tools/timestamp

Unix timestamp ↔ ISO date.

- Cost: free, no API key required
- Body: application/json

Parameters:

- `value` (string, required) - A Unix timestamp, or a date string.
- `mode` (string, optional, default auto) - to-date or to-unix.

```bash
curl -X POST https://fileoven.com/api/v1/tools/timestamp \
  -H "Content-Type: application/json" \
  -d '{"value":"255"}'
```

### POST /api/v1/tools/timezone-converter

Convert an instant between IANA timezones.

- Cost: free, no API key required
- Body: application/json

Parameters:

- `to` (string, required) - Target IANA timezone.
- `datetime` (string, optional, default now) - ISO 8601 instant.
- `from` (string, optional) - Source IANA timezone, for the comparison line.

```bash
curl -X POST https://fileoven.com/api/v1/tools/timezone-converter \
  -H "Content-Type: application/json" \
  -d '{"to":"Europe/Berlin"}'
```

### POST /api/v1/tools/unit-converter

Convert length, weight, volume, area, speed, time, data, pressure, energy, power, angle, frequency or temperature.

- Cost: free, no API key required
- Body: application/json

Parameters:

- `category` (string, required) - length, weight, volume, area, speed, time, data, pressure, energy, power, angle, frequency or temperature.
- `from` (string, required) - Source unit symbol, e.g. m or kg.
- `to` (string, required) - Target unit symbol, e.g. km or lb.
- `value` (number, required) - The numeric value to convert.

```bash
curl -X POST https://fileoven.com/api/v1/tools/unit-converter \
  -H "Content-Type: application/json" \
  -d '{"category":"length","from":"m","to":"km","value":255}'
```

### POST /api/v1/tools/url-encoder

Percent-encode or decode, whole-URI or component.

- Cost: free, no API key required
- Body: application/json

Parameters:

- `text` (string, required) - Text to encode or decode.
- `mode` (string, optional, default encode) - Whether to encode or decode the text.
- `component` (boolean, optional, default true) - Component encoding rather than whole-URI.

```bash
curl -X POST https://fileoven.com/api/v1/tools/url-encoder \
  -H "Content-Type: application/json" \
  -d '{"text":"hello world"}'
```

### POST /api/v1/tools/uuid-generator

Generate 1-1000 v4 UUIDs.

- Cost: free, no API key required
- Body: application/json

Parameters:

- `count` (number, optional, default 1) - How many v4 UUIDs, 1-1000.

```bash
curl -X POST https://fileoven.com/api/v1/tools/uuid-generator \
  -H "Content-Type: application/json" \
  -d '{"count":1}'
```

### POST /api/v1/tools/vcard-generator

Build an RFC 6350 vCard 3.0 from contact fields.

- Cost: free, no API key required
- Body: application/json

Parameters:

- `first_name` (string, optional) - Given name. Supply at least one of first_name or last_name.
- `last_name` (string, optional) - Family name, used for the N and FN fields.
- `organization` (string, optional) - Organization name for the ORG field.
- `title` (string, optional) - Job title for the TITLE field.
- `email` (string, optional) - Email address for the EMAIL field.
- `phone` (string, optional) - Phone number for the TEL field.
- `url` (string, optional) - Website URL for the URL field.
- `note` (string, optional) - Free-text note.

```bash
curl -X POST https://fileoven.com/api/v1/tools/vcard-generator \
  -H "Content-Type: application/json" \
  -d '{"first_name":"Ada","last_name":"Lovelace","email":"ada@example.com"}'
```

### POST /api/v1/tools/word-counter

Characters, words, lines, paragraphs, sentences, and reading time.

- Cost: free, no API key required
- Body: application/json

Parameters:

- `text` (string, required) - The text to count words and characters in.

```bash
curl -X POST https://fileoven.com/api/v1/tools/word-counter \
  -H "Content-Type: application/json" \
  -d '{"text":"hello world"}'
```

### POST /api/v1/tools/xml-json

XML to JSON, or JSON to XML. Attributes map to @-prefixed keys.

- Cost: free, no API key required
- Body: application/json

Parameters:

- `xml` (string, optional) - XML to convert. Supply xml or json.
- `json` (string, optional) - JSON to convert to XML.
- `root` (string, optional) - Root element name when converting JSON.

```bash
curl -X POST https://fileoven.com/api/v1/tools/xml-json \
  -H "Content-Type: application/json" \
  -d '{"xml":"<order id=\"7\"><item>Widget</item></order>"}'
```

### POST /api/v1/tools/yaml-json

YAML to JSON, or JSON to YAML.

- Cost: free, no API key required
- Body: application/json

Parameters:

- `yaml` (string, optional) - YAML to convert to JSON. Supply yaml or json.
- `json` (string, optional) - JSON to convert to YAML.
- `indent` (number, optional, default 2) - Indent width.

```bash
curl -X POST https://fileoven.com/api/v1/tools/yaml-json \
  -H "Content-Type: application/json" \
  -d '{"yaml":"name: FileOven\nversion: 1"}'
```

## Archive (2)



### POST /api/v1/tools/bulk-rename

Find/replace, prefix, suffix and sequence-number a batch of files into a ZIP.

- Cost: 2 credits
- Body: multipart/form-data

Parameters:

- `files` (file[], required) - Files to rename, 40 MB total.
- `find` (string, optional) - Literal substring to replace. Never treated as a pattern.
- `replace` (string, optional) - Text that replaces each match of find.
- `prefix` (string, optional) - Text prepended to every renamed file.
- `suffix` (string, optional) - Text appended before the file extension.
- `sequence` (boolean, optional, default false) - Whether to append an incrementing sequence number.
- `start` (number, optional, default 1) - The first number in the sequence.
- `padding` (number, optional, default 3) - Sequence zero padding, 1-12.

```bash
curl -X POST https://fileoven.com/api/v1/tools/bulk-rename \
  -H "Authorization: Bearer sk_live_..." \
  -F "files=@input.png" -F "files=@second-input.png" \
  -o renamed.zip
```

### POST /api/v1/tools/zip-tool

Create a ZIP from uploaded files, or extract one to base64 contents.

- Cost: 2 credits
- Body: multipart/form-data

Parameters:

- `files` (file[], optional) - Files to compress into an archive. Supply files to create, or file to extract.
- `file` (file, optional) - A ZIP to extract, returned as base64 contents.
- `mode` (string, optional, default auto) - extract to force extraction.

```bash
curl -X POST https://fileoven.com/api/v1/tools/zip-tool \
  -H "Authorization: Bearer sk_live_..." \
  -F "files=@input.zip" -F "files=@second-input.zip" \
  -o archive.zip
```

## 3D (6)



### POST /api/v1/tools/glb-to-obj

Extract the first mesh from a GLB into OBJ. Geometry only, no materials.

- Cost: 3 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The file to process.

```bash
curl -X POST https://fileoven.com/api/v1/tools/glb-to-obj \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@model.glb" \
  -o model.obj
```

### POST /api/v1/tools/glb-to-stl

Convert the first mesh of a GLB to binary STL, with computed facet normals.

- Cost: 3 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The file to process.

```bash
curl -X POST https://fileoven.com/api/v1/tools/glb-to-stl \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@input.png"
```

### POST /api/v1/tools/model-optimizer

Report mesh statistics and what deduplication would save. Analysis only; does not rewrite the model.

- Cost: 2 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The file to process.

```bash
curl -X POST https://fileoven.com/api/v1/tools/model-optimizer \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@input.png"
```

### POST /api/v1/tools/obj-to-glb

Convert Wavefront OBJ to glTF binary. N-gons are triangulated.

- Cost: 3 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The file to process.

```bash
curl -X POST https://fileoven.com/api/v1/tools/obj-to-glb \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@input.png"
```

### POST /api/v1/tools/stl-to-glb

Convert STL to glTF binary. Geometry only, no materials.

- Cost: 3 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The file to process.

```bash
curl -X POST https://fileoven.com/api/v1/tools/stl-to-glb \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@input.png"
```

### POST /api/v1/tools/stl-to-obj

Convert binary or ASCII STL to OBJ. Geometry only, no materials.

- Cost: 3 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The file to process.

```bash
curl -X POST https://fileoven.com/api/v1/tools/stl-to-obj \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@model.stl" \
  -o model.obj
```

## Audio (2)



### POST /api/v1/tools/audio-metadata

Read ID3 / Vorbis / MP4 audio tags.

- Cost: 1 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The file to process.

```bash
curl -X POST https://fileoven.com/api/v1/tools/audio-metadata \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@input.mp3"
```

### POST /api/v1/tools/audio-strip

Strip ID3v1/ID3v2 tags from MP3.

- Cost: 1 credits
- Body: multipart/form-data

Parameters:

- `file` (file, required) - The file to process.

```bash
curl -X POST https://fileoven.com/api/v1/tools/audio-strip \
  -H "Authorization: Bearer sk_live_..." \
  -F "file=@input.mp3"
```

## Not available via the API

These return `501` with a reason and charge nothing. Most need a browser runtime.

- `fbx-to-glb` - Not available server-side: FBX is a proprietary binary scene tree with its own compression; converting it needs a real scene graph, not a mesh reader. Use /tools/fbx-to-glb.
- `usdz-converter` - Not available server-side: USDZ is a zipped USD stage, which needs a full scene graph rather than the mesh geometry our 3D endpoints handle. Use /tools/usdz-converter.
- `model-viewer` - Not available server-side: A viewer is a UI, not a conversion. Use /tools/model-viewer.
- `remove-background` - Not available server-side: Background removal runs a browser AI model; use /tools/remove-background
- `image-ocr` - Not available server-side: AI tools are paused while the provider is swapped; use /tools/image-ocr
- `speech-transcribe` - Not available server-side: AI tools are paused while the provider is swapped
- `ai-image-upscaler` - Not available server-side: Paused while the AI provider is replaced. Use /tools/ai-image-upscaler.
- `scan-to-pdf` - Not available server-side: Captures pages from the device camera, which has no server equivalent. Use /tools/scan-to-pdf.
- `document-data-extractor` - Not available server-side: Built, but switched off while the AI provider is replaced. See Live Testing/ai-provider-plan.md.
- `edit-pdf` - Not available server-side: Interactive page editing is a UI, not a single request. Use /tools/edit-pdf.
- `ai-pdf-assistant` - Not available server-side: Built, but switched off while the AI provider is replaced. See Live Testing/ai-provider-plan.md.
- `pdf-translator` - Not available server-side: Built, but switched off while the AI provider is replaced. See Live Testing/ai-provider-plan.md.
- `powerpoint-to-pdf` - Not available server-side: Needs a rasterizer to draw PDF or Office pages to pixels, which means a canvas dependency we do not run server-side. The text layer is available at /v1/tools/pdf-extract. Use /tools/powerpoint-to-pdf.
- `powerpoint-images` - Not available server-side: Needs a rasterizer to draw PDF or Office pages to pixels, which means a canvas dependency we do not run server-side. The text layer is available at /v1/tools/pdf-extract. Use /tools/powerpoint-images.
- `pdf-to-powerpoint` - Not available server-side: Needs a rasterizer to draw PDF or Office pages to pixels, which means a canvas dependency we do not run server-side. The text layer is available at /v1/tools/pdf-extract. Use /tools/pdf-to-powerpoint.
- `html-to-pdf` - Not available server-side: Needs a rasterizer to draw PDF or Office pages to pixels, which means a canvas dependency we do not run server-side. The text layer is available at /v1/tools/pdf-extract. Use /tools/html-to-pdf.
- `audio-converter` - Not available server-side: Audio transcoding runs on ffmpeg in the browser. Reading and stripping tags is available server-side; re-encoding is not. Use /tools/audio-converter.
- `audio-trim` - Not available server-side: Audio transcoding runs on ffmpeg in the browser. Reading and stripping tags is available server-side; re-encoding is not. Use /tools/audio-trim.
- `audio-merge` - Not available server-side: Audio transcoding runs on ffmpeg in the browser. Reading and stripping tags is available server-side; re-encoding is not. Use /tools/audio-merge.
- `audio-silence-remove` - Not available server-side: Audio transcoding runs on ffmpeg in the browser. Reading and stripping tags is available server-side; re-encoding is not. Use /tools/audio-silence-remove.
- `audio-adjuster` - Not available server-side: Audio transcoding runs on ffmpeg in the browser. Reading and stripping tags is available server-side; re-encoding is not. Use /tools/audio-adjuster.
- `code-reader` - Not available server-side: Reads a camera or image stream through a browser-only barcode decoder. Use /tools/code-reader.
- `currency-converter` - Not available server-side: Needs a live third-party exchange-rate API, so our uptime and per-call cost would depend on someone else's. Use /tools/currency-converter.
- `regex-tester` - Not available server-side: Refused on purpose: running a caller's regex on our servers is a catastrophic-backtracking denial of service, and Node has no way to time a regex out. Use /tools/regex-tester.
- `text-to-speech` - Not available server-side: Uses the browser's speech synthesis voices; nothing equivalent runs server-side. Use /tools/text-to-speech.
- `screen-recorder` - Not available server-side: Records the user's own screen, which only a browser can do. Use /tools/screen-recorder.
- `video-to-gif` - Not available server-side: Video transcoding runs on ffmpeg compiled to WebAssembly in the browser. A server version means real per-minute compute cost, which the current pricing does not cover. Use /tools/video-to-gif.
- `video-compress` - Not available server-side: Video transcoding runs on ffmpeg compiled to WebAssembly in the browser. A server version means real per-minute compute cost, which the current pricing does not cover. Use /tools/video-compress.
- `mp4-to-webm` - Not available server-side: Video transcoding runs on ffmpeg compiled to WebAssembly in the browser. A server version means real per-minute compute cost, which the current pricing does not cover. Use /tools/mp4-to-webm.
- `video-trim` - Not available server-side: Video transcoding runs on ffmpeg compiled to WebAssembly in the browser. A server version means real per-minute compute cost, which the current pricing does not cover. Use /tools/video-trim.
- `video-to-audio` - Not available server-side: Video transcoding runs on ffmpeg compiled to WebAssembly in the browser. A server version means real per-minute compute cost, which the current pricing does not cover. Use /tools/video-to-audio.
- `video-merge` - Not available server-side: Video transcoding runs on ffmpeg compiled to WebAssembly in the browser. A server version means real per-minute compute cost, which the current pricing does not cover. Use /tools/video-merge.
- `video-resize` - Not available server-side: Video transcoding runs on ffmpeg compiled to WebAssembly in the browser. A server version means real per-minute compute cost, which the current pricing does not cover. Use /tools/video-resize.
- `social-video-toolkit` - Not available server-side: Video editing runs on ffmpeg in the browser. Use /tools/social-video-toolkit.
- `video-converter` - Not available server-side: Video transcoding runs on ffmpeg compiled to WebAssembly in the browser. A server version means real per-minute compute cost, which the current pricing does not cover. Use /tools/video-converter.
- `gif-to-mp4` - Not available server-side: Video transcoding runs on ffmpeg compiled to WebAssembly in the browser. A server version means real per-minute compute cost, which the current pricing does not cover. Use /tools/gif-to-mp4.
- `html-markdown` - Not available server-side: Needs a DOM parser to walk the document; Node has no DOMParser. Use /tools/html-markdown.
- `ip-lookup` - Not available server-side: Needs a third-party geolocation API for every call. Use /tools/ip-lookup.
