Reducto CLI
The Reducto document platform in your shell: parse, extract, split, classify and edit documents from the command line, in scripts, and inside agent workflows.
One static binary. No runtime. Every field of the Reducto API is reachable without waiting for a CLI release.
curl -fsSL https://reducto.ai/cli | sh
reducto login
reducto parse report.pdf
Table of Contents
- Why Reducto
- Installation
- Authentication
- Quick Start
- Commands
- Any API field
- Inputs and outputs
- Supported File Types
- Use Cases
- Configuration
- Upgrading from 0.1.x
- Development
- Related Projects
- Resources
Why Reducto
Reducto is the agentic document platform for leading AI teams who demand enterprise performance at scale. We provide a comprehensive toolkit for working with documents the way a human would, combining custom in-house and leading frontier models to power efficient and accurate document workflows.
The CLI brings that platform directly into your shell, scripts, and agent workflows.
Performance for you
Zero-shot accuracy on complex documents where other solutions aren't production-ready. Reducto orchestrates multiple models under the hood — routing, probes, and agentic VLM multipasses — and continuously updates them so you don't have to chase the frontier. Handles the long tail: tables, charts, figures, handwriting, scans.
Enterprise ready
Hosted, VPC, on-premises, and air-gapped deployments to meet any data residency or security requirement. SOC 2 and HIPAA compliant with zero data retention by default.
Complete toolkit
One platform for every document task — parse, classify, split, extract, edit. 30+ filetypes, not just PDFs. Agent-ready tooling (CLI, MCP, plugins, integrations).
Installation
| Method | Command |
|---|---|
| Shell (macOS, Linux) | curl -fsSL https://reducto.ai/cli | sh |
| PowerShell (Windows) | irm https://reducto.ai/cli.ps1 | iex |
| npm | npm install -g @reductoai/cli |
| pip / pipx / uv | pip install reducto-cli · pipx install reducto-cli · uv tool install reducto-cli |
| Go | go install github.com/reductoai/cli/cmd/reducto@latest |
| Binaries | GitHub Releases (darwin, linux, windows · amd64, arm64) |
The npm and PyPI packages carry the same binary as the release; they do not download anything
at install time. The shell installer writes to ~/.local/bin, the PowerShell installer to
%LOCALAPPDATA%\Programs\reducto (set REDUCTO_INSTALL_DIR to change either); both verify
the release checksum.
Check the install:
reducto version
Authentication
reducto login
This opens a browser for a device-code sign in and saves the key to ~/.reducto/config.yaml
(mode 0600). Without a browser, pass the key in: reducto login --api-key <key> or
echo $KEY | reducto login --api-key -.
The key is resolved in this order: --api-key, $REDUCTO_API_KEY, ~/.reducto/config.yaml.
Quick Start
# Parse a PDF into Markdown
reducto parse report.pdf
# Parse a folder, one output file per input
reducto parse ./invoices --out-dir parsed/
# Extract structured data with a JSON Schema
reducto extract invoice.pdf -s schema.json
# Or with a quick inline schema
reducto extract invoice.pdf -f vendor,total:number,due_date
# Edit a document with natural language
reducto edit w9.pdf -i "Name: Jane Doe. Check the Individual box." --save w9.filled.pdf
# Chain: parse once, reuse the job for extract
reducto parse contract.pdf -o id | reducto extract - -s terms.json
Commands
| Command | What it does |
|---|---|
parse |
Document → markdown, chunks, tables, figures |
extract |
Document → JSON that matches your schema |
split |
Find sections or sub-documents by description |
classify |
Assign one of your categories to each document |
edit |
Fill forms and change text with instructions; returns a PDF |
upload |
Upload a file and print its reducto:// handle |
job, jobs, cancel |
Inspect, list, and cancel async jobs |
studio |
Open a job in Reducto Studio |
search, schema, docs |
Find and inspect API fields; open the docs |
login, version |
Sign in; print CLI, SDK and API versions |
reducto <command> --help lists the flags and examples for each command.
Common flags on every API command:
-o <fmt> auto | pretty | md | json | payload | id
-p <pages> page selection, e.g. 1-5,8
--save <path> write the output to a file (edit: download the PDF)
--out-dir <dir> with many inputs, one file per input
--async submit and print the job id; do not wait
-j <n> parallel requests for many inputs (default 4)
--dry-run print the request body and exit; no network call
-q / -v quiet / verbose
Any API field
Named flags cover the common options. Everything else in the API is reachable too:
reducto search "merge tables" # find the field and its docs page
reducto schema parse formatting # types and defaults for a section
reducto parse doc.pdf -S formatting.merge_tables=true -S retrieval.chunking.chunk_mode=section
reducto parse doc.pdf -c body.json # a whole request body; flags layer on top
reducto parse doc.pdf --dry-run # see exactly what would be sent
-S path=value takes a dotted path and a JSON value (bare words are strings). Before anything is
uploaded, the body is checked against the CLI's copy of the API spec: unknown paths, values
outside an enum and wrong primitive types are errors with a hint, so a typo never costs a
request. Fields newer than the CLI's spec go through with --force.
Inputs and outputs
Inputs can be local files, directories (recursed, supported types only), https:// URLs,
reducto:// upload handles, jobid:// handles from a previous command, or - for stdin.
Output goes to stdout. -o picks the shape: md for text, json for the full response,
payload for just the result, id for a handle you can pipe into the next command. Status
lines go to stderr, so reducto parse a.pdf > a.md is clean.
Supported File Types
PDF, images (PNG, JPG, TIFF, WEBP), Word (DOC, DOCX), PowerPoint (PPT, PPTX), Excel (XLS, XLSX, CSV), Apple Numbers, and more. See the docs for the full list.
Use Cases
Invoice and Receipt Processing
reducto parse ./invoices --out-dir parsed/
reducto extract ./invoices -s schemas/invoice.json --out-dir extracted/
Contract and Legal Document Review
reducto parse contract.pdf --agentic -S formatting.include='["change_tracking","comments"]'
reducto extract contract.pdf -s schemas/contract_terms.json --citations
Form Processing and Auto-Fill
reducto edit onboarding.pdf -i "Employee: Alex Chen. Start date: 2025-04-01. Select Full-time." --save onboarding.filled.pdf
Financial Statement Analysis
reducto extract quarterly_report.pdf -s schemas/financial_statement.json --deep
Feeding Agents and LLM Pipelines
reducto parse spec.pdf --chunk section > spec.md
reducto parse spec.pdf -o json | jq '.result.chunks[].content'
Configuration
| Setting | Source |
|---|---|
| API key | --api-key, $REDUCTO_API_KEY, ~/.reducto/config.yaml |
| Base URL | --base-url, $REDUCTO_BASE_URL (default https://platform.reducto.ai) |
| Color | --color auto|always|never, $NO_COLOR |
| Telemetry headers | DO_NOT_TRACK=1 or REDUCTO_TELEMETRY=0 turns off the X-Reducto-* request headers |
The CLI only talks to the Reducto API (and to Reducto Studio during login). Nothing is sent
anywhere else.
Upgrading from 0.1.x
Version 0.2.0 replaces the Python CLI with a single Go binary. The package names are the same
(pip install reducto-cli), the config file is the same, and login, parse, extract
and edit still exist. What changed:
- Output goes to stdout instead of a
<file>.parse.mdnext to the input. Use--savefor one file or--out-dirfor a folder. parse --change-tracking/--highlights/--hyperlinks/--commentsbecame-S formatting.include='["change_tracking",...]'.editwrites the PDF where--savepoints instead of<file>.edited.pdf.- New:
split,classify,upload,job,jobs,cancel,studio,search,schema,docs, and-Sfor any API field.
Development
make build # bin/reducto
make test # gofmt, vet, tests
make spec # refresh the embedded OpenAPI document (cmd/reducto/openapi.json)
make packages # snapshot release + npm packages + wheels, for local checks
Releases: push a vX.Y.Z tag. The Publish workflow builds the binaries with GoReleaser,
creates the GitHub release, and publishes the PyPI wheels and npm packages from those same
binaries. See CHANGELOG.md.
Related Projects
| Project | Description |
|---|---|
| Reducto Python SDK | Python client for the Reducto API (pip install reductoai) |
| Reducto Node.js SDK | Node.js client for the Reducto API (npm install reductoai) |
| Reducto Go SDK | Go client for the Reducto API; the CLI is built on it |
| Reducto Claude Code Plugins | Official Reducto plugins for Claude Code |
| Reducto Studio | No-code web interface for document processing |
Resources
Metadata
Release files for reducto-cli 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| reducto_cli-0.2.0-py3-none-win_arm64.whl | Python 3 | none | Windows ARM64 | Details |
| reducto_cli-0.2.0-py3-none-win_amd64.whl | Python 3 | none | Windows x86-64 | Details |
| reducto_cli-0.2.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.musllinux_1_1_x86_64.whl | Python 3 | none | Linux musl 1.1+ x86-64, Linux glibc 2.17+ x86-64 | Details |
| reducto_cli-0.2.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl | Python 3 | none | Linux glibc 2.17+ ARM64, Linux musl 1.1+ ARM64 | Details |
| reducto_cli-0.2.0-py3-none-macosx_11_0_arm64.whl | Python 3 | none | macOS 11.0+ ARM64 | Details |
| reducto_cli-0.2.0-py3-none-macosx_10_12_x86_64.whl | Python 3 | none | macOS 10.12+ x86-64 | Details |
Total release size: 16.1 MB
Release files / reducto_cli-0.2.0-py3-none-win_arm64.whl
| Download URL | reducto_cli-0.2.0-py3-none-win_arm64.whl |
|---|---|
| Size | 2.6 MB |
| Tags | Python 3 Windows ARM64 |
|
SHA-256 checksum How to use checksums |
0554368c95a1fedbf5483be8c6f7abe32183e191f04d43ed4c81f364fc713af0
|
|
BLAKE2b-256 checksum How to use checksums |
13ae7dbdc5ca1d3577be0bf917ab2d2aae83b32e710a0bdd2a13ca35497eebe9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 11, 2026.
Transparency logRelease files / reducto_cli-0.2.0-py3-none-win_amd64.whl
| Download URL | reducto_cli-0.2.0-py3-none-win_amd64.whl |
|---|---|
| Size | 2.8 MB |
| Tags | Python 3 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
dd80b516fa3ea74a872899fe024b197a05a42c7f32a38a3a0727a97831c85b8a
|
|
BLAKE2b-256 checksum How to use checksums |
48440bf1c7a0c928ffc5dc21079e80ef91838a60aa426816016630c68ecc88e4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 11, 2026.
Transparency logRelease files / reducto_cli-0.2.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.musllinux_1_1_x86_64.whl
| Download URL | reducto_cli-0.2.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.musllinux_1_1_x86_64.whl |
|---|---|
| Size | 2.8 MB |
| Tags | Linux glibc 2.17+ x86-64 Linux musl 1.1+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
ea5e66910e3385c3573dee862b48e46d25bf5cb7bc15752c906b9e8e0810a712
|
|
BLAKE2b-256 checksum How to use checksums |
b4c73d632a56b94538326effed7ef4ecfc0cf714836559113f37274de9792a09
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 11, 2026.
Transparency logRelease files / reducto_cli-0.2.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl
| Download URL | reducto_cli-0.2.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl |
|---|---|
| Size | 2.5 MB |
| Tags | Linux glibc 2.17+ ARM64 Linux musl 1.1+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
10d34b016e916e3365e6d4dd61678f08b86d74b39ca12651d2854f7cd0b1ebc8
|
|
BLAKE2b-256 checksum How to use checksums |
d0efb039399e52c869cca49cd7efe7bdc79b9bb555d27dacd63b5ac78fbec388
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 11, 2026.
Transparency logRelease files / reducto_cli-0.2.0-py3-none-macosx_11_0_arm64.whl
| Download URL | reducto_cli-0.2.0-py3-none-macosx_11_0_arm64.whl |
|---|---|
| Size | 2.6 MB |
| Tags | Python 3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
38c6e9d62fc1a3b2d1e847eb714e70155359e586579be7f61016964850ed6e39
|
|
BLAKE2b-256 checksum How to use checksums |
32f63466c403e8a101a46305effe087f18cb41b2dfee0dfafa45aa0e02c35667
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 11, 2026.
Transparency logRelease files / reducto_cli-0.2.0-py3-none-macosx_10_12_x86_64.whl
| Download URL | reducto_cli-0.2.0-py3-none-macosx_10_12_x86_64.whl |
|---|---|
| Size | 2.8 MB |
| Tags | Python 3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
87661d87b4a976532850b44c2c2b885765707b51912470102b3d6bdf005ef8dc
|
|
BLAKE2b-256 checksum How to use checksums |
2f25efa266960c844462f8868bfcd5b5de8d6075946b9751e207657d86c4e4f3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 11, 2026.
Transparency log