> ## Documentation Index
> Fetch the complete documentation index at: https://docs.reducto.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Frequently Asked Questions

> Common questions about using Reducto

## Documents and Processing

<AccordionGroup>
  <Accordion title="How do I return the whole document as plain Markdown?">
    Set chunking to `disabled` (the default). The entire document will be returned as a single chunk with all content in the `content` field as Markdown.

    ```python theme={null}
    result = client.parse.run(
        input=upload.file_id,
        retrieval={"chunking": {"chunk_mode": "disabled"}}
    )

    # Full document as markdown
    markdown = result.result.chunks[0].content
    ```

    Tables will be formatted according to your `table_output_format` setting (default: `dynamic`, which uses Markdown for simple tables).
  </Accordion>

  <Accordion title="What's the difference between content and embed fields?">
    Both fields contain the chunk's text, but optimized for different purposes:

    * **`content`**: Raw extraction with original formatting. Tables appear as HTML or Markdown. Use for display.
    * **`embed`**: Optimized for vector embeddings. When `embedding_optimized: true`, tables become natural language summaries like "This table shows quarterly revenue..." which embed better.

    **For RAG:** Use `embed` for your vector database, `content` for displaying results to users.

    See [Understanding Chunks](/parse/response-format#understanding-chunks) for details.
  </Accordion>

  <Accordion title="How do I use Reducto for RAG?">
    1. **Parse with variable chunking** to get semantically meaningful segments
    2. **Enable embedding optimization** so tables become natural language
    3. **Filter noise** like headers and footers
    4. **Store chunks** in your vector database

    ```python theme={null}
    result = client.parse.run(
        input=upload.file_id,
        retrieval={
            "chunking": {"chunk_mode": "variable", "chunk_size": 1000},
            "embedding_optimized": True,
            "filter_blocks": ["Header", "Footer", "Page Number"]
        }
    )

    for chunk in result.result.chunks:
        your_vector_db.insert(
            embedding=your_embedding_function(chunk.embed),
            metadata={"content": chunk.content, "blocks": chunk.blocks}
        )
    ```

    See [Parse Best Practices](/parse/best-practices) for more.
  </Accordion>

  <Accordion title="Which configurations increase latency?">
    **Adds significant latency:**

    * `enhance.agentic` with any scope (runs VLM passes)
    * `enhance.agentic[].advanced_chart_agent: true` (detailed chart analysis)
    * Large documents with `embedding_optimized: true`

    **Moderate impact:**

    * `settings.return_images` (generates cropped images)
    * `settings.embed_pdf_metadata` (modifies PDF)

    **Minimal impact:**

    * Chunking mode changes
    * Table output format changes
    * Block filtering

    For latency-sensitive applications, disable agentic modes and use async with priority for the fastest response.
  </Accordion>

  <Accordion title="Can I choose which LLM or model Reducto uses?">
    No. Reducto manages model selection internally to optimize for accuracy, cost, and latency. The models used may change as we improve the system.

    For on-premise deployments, you can configure which LLM providers are available. See [LLM Configuration](/onprem/llm_options).
  </Accordion>
</AccordionGroup>

## URLs and Retention

<AccordionGroup>
  <Accordion title="How long are result URLs valid?">
    * **Image URLs** (`image_url` from `return_images`): Valid for 1 hour
    * **PDF URLs** (`pdf_url`): Valid for 1 hour
    * **Result URLs** (when `type: "url"`): Valid for 1 hour

    Download or process any URLs promptly after receiving them.
  </Accordion>

  <Accordion title="How long are job results retained?">
    By default, job results are deleted after **12 hours** per Reducto's zero data retention (ZDR) policy.

    To keep results longer:

    ```python theme={null}
    result = client.parse.run(
        input=upload.file_id,
        settings={"persist_results": True}
    )
    ```

    With `persist_results: true`, results are stored indefinitely and can be retrieved anytime using the job ID. This requires opting in to Reducto Studio.
  </Accordion>

  <Accordion title="Why am I getting a URL instead of inline results?">
    When the response exceeds approximately 6MB, Reducto returns `result.type: "url"` instead of `result.type: "full"`. Fetch the content from `result.url`:

    ```python theme={null}
    if result.result.type == "url":
        import requests
        chunks = requests.get(result.result.url).json()
    else:
        chunks = result.result.chunks
    ```

    To always get URL responses (for consistent handling):

    ```python theme={null}
    result = client.parse.run(
        input=upload.file_id,
        settings={"force_url_result": True}
    )
    ```
  </Accordion>

  <Accordion title="Job ID not found error">
    Jobs are deleted after 12 hours per the zero data retention policy. If you're looking for a job from more than 12 hours ago, it has been automatically deleted.

    To prevent this:

    * Process results immediately when you receive them
    * Store results in your own database
    * Use `persist_results: true` to keep results indefinitely
  </Accordion>
</AccordionGroup>

## API and Integration

<AccordionGroup>
  <Accordion title="What's the maximum file size?">
    * **Direct upload** (`/upload`): 100MB
    * **Presigned URL upload**: 5GB
    * **URL passthrough**: No limit (Reducto fetches the file)

    For files over 100MB, use the [presigned URL method](/upload/large-files). For files over 5GB, host them on S3 or another storage service and pass the URL directly.
  </Accordion>

  <Accordion title="How do I check system status?">
    Visit [status.reducto.ai](https://status.reducto.ai) for real-time status of all Reducto services, uptime history, and incident reports.

    Subscribe to updates to get notified of any service disruptions.
  </Accordion>

  <Accordion title="How do I contact support?">
    * **Email**: [support@reducto.ai](mailto:support@reducto.ai)
    * **Slack**: Available for enterprise customers
    * **Studio**: Use the feedback button in [Reducto Studio](https://studio.reducto.ai/)
  </Accordion>
</AccordionGroup>

***

## Still Have Questions?

<CardGroup cols={2}>
  <Card title="Error Codes" icon="triangle-exclamation" href="/reference/error-codes">
    Understand and resolve API errors.
  </Card>

  <Card title="Rate Limits" icon="gauge" href="/reference/rate-limits">
    API request limits and optimization.
  </Card>

  <Card title="Credit Usage" icon="coins" href="/reference/credit-usage">
    How credits are calculated.
  </Card>

  <Card title="Glossary" icon="book" href="/reference/glossary">
    Key terms and concepts.
  </Card>
</CardGroup>
