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

# Pricing

> What each Pulse API endpoint costs, in credits, and what is free.

Each Pulse API endpoint has a list price in credits. What a credit costs depends on your plan.

## Prices

| Endpoint | Price | Billed per |
| - | - | - |
| Parse | 1 credit | page parsed |
| Extract | 1 credit (6 credits with `effort: "high"`) | page read |
| Split | 1 credit (6 credits with `effort: "high"`) | page of the parse |
| Tables | 0.5 credits | table returned |
| Charts | 1 credit | chart returned |
| Classify | 0.5 credits | page read |

A pipeline and a batch have no price of their own: each step of a pipeline is billed at its endpoint's price, and each document in a batch is billed as its own parse, per page.

### Agentic confidence

Agentic confidence gives Extract more reliable confidence scores. Turn it on with `confidence: "agentic"` in an Extract config, once it's enabled for your organization.

| Add-on | Price | Billed per |
| - | - | - |
| Agentic confidence | 3 credits, added to Extract's price | page read |

For example, an Extract with `effort: "high"` and `confidence: "agentic"` costs 9 credits per page it reads.

***

## What counts as a page

* **Parse** counts every page it parses, or only the pages in its `page_range`.
* **Extract** reads the whole parse, or only the pages in its own `page_range`.
* **Split** reads every page of the parse, however many topics you name.
* **Classify** reads the first 5 pages of the document, or the pages in its `page_range`. For a spreadsheet, each sheet it reads counts as a page.
* Pages listed in a parse result's `failed_pages` aren't billed.

A spreadsheet counts as one page per 1,000 filled cells in the sheets it parses, rounded up, plus one page per chart sheet. It always counts as at least one page. Hidden sheets, rows and columns count only when you ask Pulse to read them with `config.enhancements.spreadsheet.include_hidden`.

For example, a 40-page PDF costs 40 credits to parse. An Extract on that parse with `page_range: "1-5"` then costs 5 credits.

## What's free

* A job that fails, is canceled, or is skipped in a pipeline costs nothing.
* A request that Pulse refuses, such as one with an invalid body, costs nothing.
* Reading a job's status or result costs nothing, however often you poll.
* Saved configs, webhooks, organization settings and `GET /usage` cost nothing.
* Parse's price covers every Parse option, such as chunking, word boxes and figure descriptions.

## When you're billed

Pulse bills a job once, when it completes. In a batch, each document is billed when its parse completes, and in a pipeline, each step when it completes.

If your plan, or an API key's own credit limit, can't cover a request, Pulse refuses it with a `402` and charges nothing. The error comes back on the request, or on the job's status when the check runs after the job was accepted. In a batch, each document is checked when its job starts, so the error shows on that job's status.

## Check your usage

Every result carries a `usage` object. `usage.request` shows the pages and credits that job used. `usage.org` shows your organization's totals for the current billing period, including that job, and your plan's `credit_allowance` when it has one.

[`GET /usage`](https://docs.runpulse.com/api-reference/v2/usage/get-usage) returns the pages and credits used by your organization's jobs created in a time window, by default the last 30 days. This request reads October 2026:

```python Python theme={null}
usage = client.usage.get(from_="2026-10-01T00:00:00Z", to="2026-11-01T00:00:00Z")
print(usage.org.credits_used)
```

```typescript TypeScript theme={null}
const usage = await client.usage.get({ from: "2026-10-01T00:00:00Z", to: "2026-11-01T00:00:00Z" });
console.log(usage.org?.creditsUsed);
```

```bash cURL theme={null}
curl "https://api.runpulse.com/usage?from=2026-10-01T00:00:00Z&to=2026-11-01T00:00:00Z" \
  -H "x-api-key: $PULSE_API_KEY" \
  -H "Pulse-Version: 2"
```

`client` is the one from [SDKs](https://docs.runpulse.com/v2/sdks.md). Times must be in UTC and end in `Z`. The window includes `from` but not `to`.

> [card] [Jobs and results](https://docs.runpulse.com/v2/jobs.md)
>
> Statuses, polling and reading results.

> [card] [Errors and retries](https://docs.runpulse.com/v2/errors.md)
>
> Retry without starting, and paying for, a job twice.


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