Credits are the billing unit for Reducto API usage. This page explains how credits are calculated for each endpoint and document type.
Parse Endpoint
Documents and Images
Supported formats: PDF, DOCX, DOC, PPTX, PPT, PNG, JPEG, GIF, TIFF, HEIC, and more.
| Processing Type | Credits/Page | When Applied |
|---|
| Standard | 1 | Text, layout, simple tables, OCR |
| Complex | 2 | VLM-enhanced pages (complex tables, key-value regions, figures with summarization) |
| Agentic - Standard | 2 | Agentic mode enabled on simple pages |
| Agentic - Complex | 4 | Agentic mode enabled on complex pages |
| Advanced chart agent | +4 | Per chart when advanced_chart_agent: true |
Reducto automatically classifies page complexity. You don’t choose “standard” vs “complex”. Complexity is determined by the content.
What makes a page complex?
- Tables with merged cells or nested headers
- Key-value form regions
- Figures when
summarize_figures: true (default)
Spreadsheets
Supported formats: XLSX, XLS, CSV, XLSM
| Clustering Mode | Credits | Description |
|---|
| Accurate (default) | 1 per 1,000 cells | Intelligent table detection |
| Fast | 1 per 5,000 cells | Basic clustering |
| Disabled | 1 per 5,000 cells | Single table output |
Text Files
Supported formats: HTML, TXT, RTF
| Format | Credits/Page |
|---|
| Text formats | 0.5 |
| Mode | Credits/Page | Notes |
|---|
| Standard | 2 | Schema-based extraction |
| Agent-in-the-Loop | 2 | Beta pricing (may change) |
If you pass a URL or file directly to Extract (instead of a jobid://), Parse credits are also charged. To avoid double-charging, parse first, then extract using the job ID.
# ❌ Charges for both Parse AND Extract
result = client.extract.run(
input=upload.file_id,
instructions={"schema": schema}
)
# ✅ Only charges for Extract (reuses parsed content)
parse_result = client.parse.run(input=upload.file_id)
result = client.extract.run(
input=f"jobid://{parse_result.job_id}",
instructions={"schema": schema}
)
Split Endpoint
| Mode | Credits/Page |
|---|
| Standard | 2 |
Same as Extract: passing a URL charges Parse + Split. Use jobid:// to avoid double-charging.
Edit Endpoint
| Mode | Credits/Page | Notes |
|---|
| Beta | 4 | Subject to change |
Pipeline Endpoint
Pipelines combine multiple operations. Credits are the sum of all operations in the pipeline:
Pipeline credits = Parse + Extract (if configured) + Split (if configured)
Credit Optimization Tips
1. Reuse Parse Results
Parse once, then run multiple Extract or Split calls using the job ID:
# Parse once
parse = client.parse.run(input=upload.file_id)
# Extract multiple schemas without re-parsing
invoice_data = client.extract.run(
input=f"jobid://{parse.job_id}",
instructions={"schema": invoice_schema}
)
vendor_data = client.extract.run(
input=f"jobid://{parse.job_id}",
instructions={"schema": vendor_schema}
)
2. Disable Agentic Mode When Not Needed
Agentic mode doubles credit usage. Only enable it for:
- Handwritten content
- Low-quality scans
- Complex tables that parse incorrectly
# Standard parsing (1-2 credits/page)
result = client.parse.run(input=upload.file_id)
# Only enable agentic when needed (2-4 credits/page)
result = client.parse.run(
input=upload.file_id,
enhance={"agentic": [{"scope": "text"}]}
)
3. Use Page Ranges
Process only the pages you need:
# Only process pages 1-10
result = client.parse.run(
input=upload.file_id,
settings={"page_range": {"start": 1, "end": 10}}
)
4. Choose Appropriate Spreadsheet Clustering
For large spreadsheets where you don’t need intelligent table detection:
result = client.parse.run(
input=upload.file_id, # spreadsheet file
spreadsheet={"clustering": "fast"} # 5x cheaper than "accurate"
)
Monitoring Usage
Track your credit usage in Reducto Studio:
- Usage dashboard: View credits consumed over time
- Job logs: See credits charged per job
- Usage alerts: Set threshold notifications
Each API response also includes credit information:
{
"job_id": "abc123",
"usage": {
"num_pages": 10,
"credits": 15.0
}
}