Convert files without leaving your AI agent - Claude Code, Cursor, Gemini & more. Set up your agent

1 / 4

ctio CLI Documentationv0.5.2

Single-binary command-line client for the Conversion Tools API. Pipe-friendly, multi-region, works on Windows, macOS, and Linux with no Node or Bun runtime to install.

Quick Start

Install on Windows with scoop, then convert your first file. Three commands total:

1. Install

bash
scoop bucket add conversiontools https://github.com/conversiontools/scoop-bucket
scoop install ctio

2. Authenticate

bash
ctio auth login

3. Convert

bash
ctio convert -t json_to_excel data.json out.xlsx

Mac and Linux users: brew install conversiontools/tap/ctio, or see the Installation section below.

Installation

Windows (scoop, recommended)

Adds the Conversion Tools scoop bucket and installs ctio onto your PATH. Future versions update with scoop update ctio.

bash
scoop bucket add conversiontools https://github.com/conversiontools/scoop-bucket
scoop install ctio

First time only, if scoop is not installed yet:

bash
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Invoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expression

Windows (manual download)

If you prefer not to use scoop:

bash
Invoke-WebRequest -Uri https://github.com/conversiontools/ctio/releases/download/v0.5.2/ctio-windows-x64.exe -OutFile ctio.exe

Move ctio.exe to a directory on your PATH, or add the current directory to PATH.

macOS and Linux (Homebrew, recommended)

Installs ctio from the Conversion Tools tap with no Gatekeeper prompt. Future versions update with brew upgrade ctio.

bash
brew install conversiontools/tap/ctio

macOS (Apple Silicon, manual download)

bash
curl -fL https://github.com/conversiontools/ctio/releases/download/v0.5.2/ctio-darwin-arm64 -o ctio
chmod +x ctio
xattr -d com.apple.quarantine ctio 2>/dev/null || true
sudo mv ctio /usr/local/bin/

The binaries are not notarized, so the xattrline clears Gatekeeper's quarantine flag on the downloaded file. Homebrew installs don't need it.

macOS (Intel, manual download)

bash
curl -fL https://github.com/conversiontools/ctio/releases/download/v0.5.2/ctio-darwin-x64 -o ctio
chmod +x ctio
xattr -d com.apple.quarantine ctio 2>/dev/null || true
sudo mv ctio /usr/local/bin/

Linux (manual download)

bash
curl -fL https://github.com/conversiontools/ctio/releases/download/v0.5.2/ctio-linux-x64 -o ctio
chmod +x ctio
sudo mv ctio /usr/local/bin/

All releases live on GitHub.

Authentication

Run ctio auth login once and paste your API token. The token is validated against the API and stored in a per-user profile file.

Interactive login

bash
ctio auth login

ctio will print a link to your profile page where you can copy the API token, then prompt for the token (input is hidden), a profile name, and a region.

Token resolution order

For every command, ctio resolves the token in this priority:

  1. --token <token> flag (one-off override)
  2. CT_API_TOKEN environment variable
  3. --profile <name> flag (or CT_PROFILE env)
  4. Active profile from the config file

Multiple profiles & regions

Useful for separating personal/team accounts, or pinning specific tasks to a region.

bash
ctio auth add-profile prod --region us # add a US-pinned profile
ctio auth use-profile prod # switch active profile
ctio auth list --format pretty # see all profiles (tokens masked)
ctio convert --region eu -t json_to_excel ...# override region per-command

Profiles live at ~/.config/conversiontools/profiles.toml on Unix (mode 0600) or %APPDATA%\conversiontools\profiles.toml on Windows.

Commands

ctio ships with 9 top-level verbs. Each verb supports --help for full option lists.

CommandDescription
ctio authManage profiles: login, status, list, add-profile, use-profile, logout. Token resolution: --token > CT_API_TOKEN env > active profile.
ctio convertRun a conversion. Streams stdin/stdout via `-`, supports --option key=value, --url for remote inputs, --file for converters that take a second file, --sandbox. Prints a warning when the API ignores an option or replaces a value.
ctio parseExtract named fields from a document (invoices, receipts, statements) with Parse, as JSON.
ctio studioReuse an AI Studio custom converter: studio list, studio run <converter_id> <file> [output], studio download.
ctio taskInspect a task by ID. --wait blocks until SUCCESS/ERROR, --download streams the result to file or stdout. task list shows recent tasks.
ctio listBrowse 200+ converters. Filters: --from, --to (format synonyms like xlsx and excel match), --ai, --custom. --detail in pretty mode shows option keys.
ctio describeShow one converter's options with their allowed values and defaults, e.g. `ctio describe xml_to_csv --format pretty`.
ctio voicesList the text-to-speech voices: the built-in ones and the voices you cloned, with the IDs to pass as voice_tts.
ctio versionPrint the CLI version and resolved API endpoint.

Usage Examples

ctio works with file paths, stdin/stdout (via -), and remote URLs. Default output is JSON status to stdout (or stderr when streaming a file to stdout) so it composes cleanly with jq and other tools.

Basic file-to-file conversion

bash
ctio convert -t json_to_excel data.json out.xlsx

Uploads the file, runs the conversion, downloads the result to out.xlsx, prints a JSON status line.

Stdin to file (no temp file on disk)

bash
cat data.json | ctio convert -t json_to_excel - out.xlsx

Streams the input directly into the upload. Safe for very large inputs - never buffers in memory.

File to stdout (pipe-friendly)

bash
ctio convert -t xml_to_csv data.xml - > out.csv

Result streams to stdout. Status JSON goes to stderr so the pipe stays clean.

Compose with other tools

bash
ctio convert -t pdf_to_text invoice.pdf - | head -200 | grep -i total

ctio fits into Unix pipelines like any other CLI. Combine with jq, sed, awk, or pass to another ctio invocation.

Conversion options

bash
ctio convert -t excel_to_xml in.xlsx out.xml --option show_columns=no --option header=yes

Pass conversion-specific options with repeatable --option key=value flags. `ctio describe excel_to_xml --format pretty` lists the options, their allowed values and defaults. If the API ignores an option or replaces a value, ctio prints a warning on stderr.

Remote URL input

bash
ctio convert -t website_to_pdf --url https://example.com out.pdf

No local file required. The API fetches the URL server-side.

Find a converter

bash
ctio list --from pdf --to text --format pretty

Browse the converter registry by input or output format. Add --detail to see option keys.

Inspect a task

bash
ctio task <task_id> --format pretty

Useful when running long jobs or debugging failures. Add --wait to block until SUCCESS/ERROR, --download to fetch the result.

Text to Speech

Narrate a text, Markdown, Word or PDF file with an AI voice. The output file name picks the format (MP3 or WAV). The audio comes out at spoken-word loudness (about -16 LUFS), 24 kHz mono, ready to drop into a video.

bash
# Narrate a script as WAV
ctio convert -t ai_text_to_speech script.txt narration.wav --option voice_tts=en_paul_neutral
# A PDF as MP3
ctio convert -t ai_pdf_to_speech handbook.pdf handbook.mp3 --option voice_tts=gb_jane_neutral
# Every voice you can use, with its ID
ctio voices --format pretty
  • Voices. Built-in voices (Oliver and Jane, UK English; Paul, US English; Marie, French) come in several speaking styles, for example gb_oliver_neutral or en_paul_cheerful.
  • Your own voice. Clone it on voice.conversiontools.io; its Voice ID is shown next to the clone on the dashboard. Pass it as voice_tts from the same account.
  • No silent fallbacks. An unknown voice, format or language is an error that names the value.
  • Cost. 10 AI credits per 1,000 characters. AI credits.

Supported Formats

ctio bundles a registry of 200+ converters across 13 categories. The same conversion types are available via the API, MCP server, and Node/Python/PHP libraries.

Documents

DOCX, DOC, PPTX, PPT, XLSX, XLS, Markdown, ODS, HTML, LaTeX

Data Formats

JSON, CSV, XML, YAML, Parquet, JSONL, BSON, Excel

Images

PNG, JPG, WebP, AVIF, HEIC, JXL, SVG, BMP, TIFF, GIF

PDF Processing

PDF to Word, Excel, CSV, Text, HTML, JPG, PNG, SVG, TIFF, EPUB

Audio

MP3, WAV, FLAC

Video

MP4, MOV, MKV, AVI

E-books

EPUB, MOBI, AZW, AZW3, FB2, FBZ, PDF

OCR

PNG, JPG, PDF to Text, searchable PDF

AI Text-to-Speech

Text, DOCX, PDF, Markdown to MP3 or WAV

AI Speech-to-Text

MP3, WAV, FLAC to Text

AI-Powered

PDF, Images to JSON, CSV, Excel, Markdown

Subtitles

SRT, VTT, ASS, CSV, Excel, Text

Web

URL/HTML to PDF, JPG, PNG, CSV

View full converter list or run ctio list for the live registry.

Pricing

ctio uses the same conversion limits as your Conversion Tools account:

  • Free tier: 100 conversions per month (max 10 per day)
  • Paid plans: higher limits and priority processing

View pricing plans or API pricing for details.

Troubleshooting

Common issues and how to resolve them:

"ctio: command not found" after install

On Windows, restart your terminal after `scoop install ctio` (or after adding the binary directory to your PATH manually). With Homebrew, run `brew doctor` if `brew install` succeeded but the command is missing. After a manual download, confirm the binary landed in /usr/local/bin and that /usr/local/bin is on your PATH.

macOS "ctio cannot be opened because the developer cannot be verified"

The ctio binaries are not notarized, so macOS Gatekeeper blocks a downloaded copy. Installing with Homebrew avoids this. For a manual download, the commands in the macOS section above run `xattr -d com.apple.quarantine ctio` to clear it. If you skipped that, run `xattr -d com.apple.quarantine /usr/local/bin/ctio` and try again, or right-click the binary in Finder and choose Open the first time.

Token errors / 401 Unauthorized

Run `ctio auth status` to see the active profile and masked token. If empty, run `ctio auth login` and paste a fresh token from https://conversiontools.io/profile. Tokens are JWTs; "Regenerate" on the profile page invalidates the old one immediately.

Where are my profiles stored?

Unix: ~/.config/conversiontools/profiles.toml (mode 0600). Windows: %APPDATA%\conversiontools\profiles.toml. Tokens are stored in plaintext at the configured permissions; ctio refuses to write the file if it cannot set 0600 on Unix.

Conversion fails or returns an error

Run with --verbose to see the task id and API exchange (tokens and file contents are never logged). Then `ctio task <id>` for the full error message. Check that the input file is valid and not corrupted, and that the conversion type is one of the entries in `ctio list`.

How do I pick the right conversion type?

`ctio list --from <input-format> --to <output-format>` filters the registry, for example `ctio list --from pdf --to excel --format pretty`. Then `ctio describe <type> --format pretty` shows every option of that converter with its allowed values and default.

ctio printed a "warning:" line but the conversion succeeded

The API ignored an option it does not support for that converter, or replaced an unsupported value with the default, and the conversion ran anyway. The result is not what you asked for: check the option name and value with `ctio describe <type>` and run it again.

Need Help?

ctio is open source under MIT. Source and issue tracker on GitHub.

Looking for in-editor integration? MCP server and Claude Code plugin cover that flow.

Stuck? Contact us and we will help you get set up.

Try ctio v0.5.2

Single binary, no runtime to install, works wherever you have a shell.

bash
# Windows
scoop bucket add conversiontools https://github.com/conversiontools/scoop-bucket
scoop install ctio
# macOS / Linux
brew install conversiontools/tap/ctio