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 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.perPeriodcounts 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.countcounts active and disabled processors.
See Service 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:
{
"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 |