> ## 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.

# Upload overview

> Lean about Reducto's Upload endpoint

The [Upload endpoint](https://docs.reducto.ai/api-reference/upload) allows you to send files directly to Reducto without relying on external storage like S3 or public URLs. Once uploaded, you’ll receive a unique `reducto://` URL (`file_id`) that can be used with the /parse, /split, or /extract endpoints.

### When to use the upload endpoint

* You have a file on disk or in memory (e.g., from a user upload).
* You don’t want to manage file hosting, cloud storage, or storage cleanup.
* You need a secure, private way to upload files without making them public.

### Key features

* Upload supports many file types like CSV, PDF, XLSX, PPT, DOC, and [much more](/v/legacy/parsing/supported-file-formats).
* There is a maximum 100MB limit for direct uploads. If your file is bigger, try the [presigned upload method](/recipes/presigned-url-upload-method).

### Example

<CodeGroup>
  ```python Python theme={null}
  from pathlib import Path
  from reducto import Reducto

  client = Reducto()
  upload = client.upload(file=Path("sample.pdf"))
  result = client.parse.run(document_url=upload)

  print(result)
  ```

  ```javascript Javascript theme={null}
  import Reducto from 'reductoai';
  import fs from 'fs';

  const client = new Reducto();

  async function main() {
    
    const upload = await client.upload({ file: fs.createReadStream("sample.pdf") });
    const result = await client.parse.run({ document_url: upload });
    
    console.log(result);
  }

  main();
  ```
</CodeGroup>
