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

# Files and limits

> The formats Pulse reads, how to send a document, and how large it can be.

Pulse reads PDFs, images, Word and PowerPoint files, spreadsheets and HTML, sent as an upload or a link.

## Supported formats

| Format | Extensions |
| - | - |
| PDF | `.pdf` |
| Images | `.jpg`, `.jpeg`, `.png`, `.tif`, `.tiff`, `.webp`, `.gif`, `.bmp` |
| Word and PowerPoint | `.docx`, `.pptx` |
| Excel and CSV | `.xlsx`, `.xlsm`, `.xls`, `.xlsb`, `.csv` |
| HTML | `.html`, `.htm` |

A TIFF's frames, a deck's slides and a workbook's sheets are its pages. An animated GIF is read as its first frame.

Pulse refuses a document before any work starts if its type isn't supported (`415`), or it's empty or can't be opened, such as a password-protected PDF (`422`). Save `.doc` and `.ppt` files as `.docx` and `.pptx` first, and scan paper documents at 300 DPI where you can.

***

## Send a document

[Parse](https://docs.runpulse.com/v2/parse.md), Classify and [pipelines](https://docs.runpulse.com/v2/pipelines.md) take one document. Send it in one of two ways, never both:

* **`file`**: the file itself, as a `multipart/form-data` part.
* **`file_url`**: a link Pulse downloads: an `http` or `https` URL anyone can download, such as a presigned URL, or the `s3://` or `gs://` URL of a public object.

Extract, Split, Tables and Charts read a completed parse by its `parse_id` instead. To send many documents at once, use [Batch](https://docs.runpulse.com/v2/batch.md).

This request uploads a PDF from disk and parses it:

```python Python theme={null}
with open("statement.pdf", "rb") as f:
    job = client.parse.run(file=f, config={"model": "ultra-2"})
```

```typescript TypeScript theme={null}
import { createReadStream } from "node:fs";

const job = await client.parse.run({ file: createReadStream("statement.pdf"), config: { model: "ultra-2" } });
```

```bash cURL theme={null}
curl -X POST https://api.runpulse.com/parse \
  -H "x-api-key: $PULSE_API_KEY" \
  -H "Pulse-Version: 2" \
  -F file=@statement.pdf \
  -F 'config={"model": "ultra-2"}'
```

`client` is the one from [SDKs](https://docs.runpulse.com/v2/sdks.md). In a multipart request, send `config` as a JSON text part.

Give a `file_url` a file extension in its path, or serve it with a matching `Content-Type`, so Pulse reads it as the right type.

> [accordion] Links Pulse won't download
>
> Pulse refuses a `file_url` that points to a private or internal address, a sign-in page, or a share link that opens a viewer instead of the file. For Google Drive, Dropbox, OneDrive and similar services, send a direct download link.

> [accordion] Redirects and slow servers
>
> Pulse follows up to 5 redirects. If the server takes more than 30 seconds to answer, the request fails with `504` (`FILE_DOWNLOAD_TIMEOUT`).

***

## Size limits

These limits apply to Parse and to pipelines:

| Document sent as | Largest size |
| - | - |
| `file` | 100 MB |
| `file_url` to a PDF or a TIFF | 100 GB |
| `file_url` to any other type | 100 MB |
| A multipart text part, such as `config` | 10 MB |

For a TIFF over 100 MB, the URL's path must end in `.tif` or `.tiff`.

***

## Long documents

Send long documents with `async: true` ([Jobs and results](https://docs.runpulse.com/v2/jobs.md)). However long a document is, it returns one result.

A long document can complete with some pages missing. `failed_pages` then lists those pages, counting from 1, `warnings` includes `PAGES_FAILED`, and `markdown` marks each missing page with an HTML comment. Treat a missing or empty `failed_pages` as every page parsed.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.