---
title: "Pricing and limits"
description: "What online OCR costs per page, which pages count, and the quotas and limits that apply."
---

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

# Pricing and limits

## Pricing

| Model | Processing | Region | Price |
| --- | --- | --- | --- |
| `unlimited-ocr` | Online | `us-west-1` | $1.25 per 1,000 pages |

Pages are charged from 2026-09-30 12:00 UTC. You're charged for the pages that succeed. In a response, `usage.pages` is the number of pages
charged for that request.

- Each PDF page and each TIFF frame is a page. A PNG, JPEG or WebP image is one page.
- Only the pages you process count: with a page selection, the pages you selected.
- Failed pages aren't charged, and requests that return an error aren't charged.
- Every request is charged separately. Sending the same document again is charged again.

Creating, reading and changing processors and reading the model catalog are free.

## Online limits

| Limit | Value |
| --- | --- |
| Document size | 10 MiB |
| Pages per document | 1 to 5 |
| Time per request | 60 seconds |
| Document types | PDF, PNG, JPEG, TIFF, WebP |

These limits apply to every model, even when a model's own `limits` in the
[catalog](/ocr/models) are higher.

## Quotas

| Quota ID | Name | Scope | Default | Adjustable |
| --- | --- | --- | --- | --- |
| `ocr.pages.perPeriod` | Pages per billing period | Organization | 10,000 pages | Yes |
| `ocr.online.requestsPerSecond` | Online requests per second | Project | 2 per second, bursts of up to 5 | Yes |
| `ocr.online.concurrentRequests` | Concurrent online requests | Organization | 2 | Yes |
| `ocr.processors.count` | Processors per project | Project | 50 | Yes |
| `ocr.processors.createsPerMinute` | Processor creates per minute | Project | 10 per minute, bursts of up to 10 | Yes |

- `ocr.pages.perPeriod` counts the pages a request selects when the request is accepted, before
  processing. Pages that then fail still count toward the quota, although they aren't charged.
  It resets at the start of each billing period.
- `ocr.processors.count` counts active and disabled processors.

See [Service quotas](/quotas) to view your quotas and their current values.

### When a quota refuses a request

A refused processing request or processor create is `429 quota_exceeded`. A processor create
over `ocr.processors.count` is `409 quota_exceeded`. Quota refusals have no `Retry-After`
header. The error's `quota` object names the quota:

```json
{
  "error": {
    "code": "quota_exceeded",
    "message": "This organization has used 9998 of its 10000 pages for the billing period, which resets at 2026-11-01T00:00:00.000Z (ocr.pages.perPeriod)",
    "quota": {
      "id": "ocr.pages.perPeriod",
      "kind": "usage",
      "scope": "organization",
      "limit": 10000,
      "used": 9998,
      "periodStart": "2026-10-01T00:00:00.000Z",
      "resetsAt": "2026-11-01T00:00:00.000Z",
      "scopeResourceName": "ezgh::org_k3f9a0x2m7qp"
    }
  }
}
```

| `quota` field | Description |
| --- | --- |
| `id` | The quota ID |
| `kind` | `usage`, `rate`, `concurrency` or `allocation` |
| `scope` | `organization` or `project` |
| `scopeResourceName` | The organization's or project's resource name |
| `limit` | The quota's value |
| `used` | For `usage` quotas, what's used this period; for `allocation` quotas, what exists now |
| `periodStart`, `resetsAt` | For `usage` quotas, the current period |
| `window` | For `rate` quotas, the window, such as `PT1S` |
| `inFlight` | For `concurrency` quotas, the requests in progress |

Source: https://docs.ezghcloud.com/ocr/pricing-and-limits/index.mdx
