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

# Overview

> How the API reference is organized, and the conventions every route follows.

The reference lists each route's inputs, outputs and errors. The conventions below apply to every route.

## Base URL and headers

Every request goes to `https://api.runpulse.com` and carries two headers:

| Header | Value |
| - | - |
| `x-api-key` | Your [API key](https://docs.runpulse.com/v2/authentication.md). `Authorization: Bearer <key>` works in its place. |
| `Pulse-Version` | `2`. Without it, a request goes to your organization's default API version, which may be version 1. |

This request sends both headers:

```bash theme={null}
curl https://api.runpulse.com/usage \
  -H "x-api-key: $PULSE_API_KEY" \
  -H "Pulse-Version: 2"
```

The [SDKs](https://docs.runpulse.com/v2/sdks.md) send both headers for you.

## Endpoints

> [card] [Parse](https://docs.runpulse.com/api-reference/v2/parse/run-parse.md)
>
> **POST** `/parse`

> [card] [Batch](https://docs.runpulse.com/api-reference/v2/batch-parse/run-batch.md)
>
> **POST** `/parse/batch`

> [card] [Extract](https://docs.runpulse.com/api-reference/v2/extract/run-extract.md)
>
> **POST** `/extract`

> [card] [Split](https://docs.runpulse.com/api-reference/v2/split/run-split.md)
>
> **POST** `/split`

> [card] [Tables](https://docs.runpulse.com/api-reference/v2/tables/run-tables.md)
>
> **POST** `/tables`

> [card] [Charts](https://docs.runpulse.com/api-reference/v2/charts/run-charts.md)
>
> **POST** `/charts`

> [card] [Classify](https://docs.runpulse.com/api-reference/v2/classify/run-classify.md)
>
> **POST** `/classify`

> [card] [Pipeline](https://docs.runpulse.com/api-reference/v2/pipeline/run-pipeline.md)
>
> **POST** `/pipeline`

Three more groups cover your account:

> [card] [Usage](https://docs.runpulse.com/api-reference/v2/usage/get-usage.md)
>
> **GET** `/usage`

> [card] [Webhook](https://docs.runpulse.com/api-reference/v2/webhook/create-webhook.md)
>
> **POST** `/webhook`

> [card] [Settings](https://docs.runpulse.com/api-reference/v2/organization-settings/get-organization-settings.md)
>
> **GET** `/settings/org`

## Routes of an endpoint

Every endpoint that starts a job has the same four routes, and Batch has them too:

| Route | What it does |
| - | - |
| `POST /{endpoint}` | Starts a job and returns its id. |
| `GET /{endpoint}/{id}` | Returns the job's status. |
| `GET /{endpoint}/{id}/result` | Returns the job's result, once it's `completed`. |
| `DELETE /{endpoint}/{id}` | Cancels the job while it's `queued` or `processing`. |

A `POST` waits for its job to end, unless you send `"async": true` to get a `202` with the job's id at once. A pipeline and a batch always run [async](https://docs.runpulse.com/v2/jobs.md).

Each endpoint except Batch also has `/{endpoint}/configs` routes, which save a config to reuse by its `config_id`. See [Saved configs](https://docs.runpulse.com/v2/saved-configs.md).

***

## Ids

Every id names the endpoint that made it, such as `parse-<uuid>`, `extract-<uuid>` or `batch-<uuid>`. Each route takes only its own endpoint's ids: another endpoint's id gets a `404`. A config you save gets an id of the form `<endpoint>-config-<uuid>`.

Each route returns its own id, such as `classify_id` or `pipeline_id`. Extract, Split, Tables and Charts read a parse by its `parse_id`:

```mermaid theme={null}
%%{init: {"themeVariables": {"fontSize": "14px"}, "flowchart": {"nodeSpacing": 24, "rankSpacing": 32, "padding": 8}}}%%
flowchart TD
    D[One document] --> C["/classify"]
    D --> P["/parse"]
    D --> L["/pipeline"]
    M[Many documents] --> B["/parse/batch"]
    B -->|one per document| P
    L -->|runs| P
    P -->|parse_id| S["/extract, /split,<br/>/tables, /charts"]
    L -->|then runs| S
```

## Conventions

* **Bodies.** A request body is JSON, or multipart form data when it uploads a file. A request that starts a job takes exactly one of `config` and a saved `config_id`. One that takes a single document takes exactly one of `file` and `file_url`.
* **Unknown fields.** A request with a field the route doesn't take is refused with a `400` that names the field.
* **Paging.** The [batch manifest](https://docs.runpulse.com/v2/batch.md) pages with `limit`. While more entries remain, the `Link` header gives the next page's URL.
* **Times.** Times are ISO 8601 in UTC and end in `Z`, such as `2026-10-16T09:30:00Z`.

> [card] [Errors and retries](https://docs.runpulse.com/v2/errors.md)
>
> What each status means, and how to retry safely.

> [card] [Pricing](https://docs.runpulse.com/v2/pricing.md)
>
> What each endpoint costs, in credits.


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