Pricing
Pay for what you process, not for seats. No per-user pricing, no annual contract, no sales call.
What one unit is
One allowance covers both endpoints. One render is one unit. One extracted page is one unit — so pulling tables out of a 40-page statement with /v1/extract costs 40, not one. There is no separate extraction plan to buy and no second number to track: GET /v1/usage counts both.
That makes a long PDF the one thing worth watching. Read part of a document with "options": { "pages": "1-5" } and you are billed for those five pages only. On a plan with no overage we will not start a job larger than your remaining allowance — you get invalid_request naming the number, rather than a quiet overshoot.
What you are billed for
A render is billable if Chromium actually ran. That means successes, and it means render_failed — the browser did the work; the HTML is what broke. You are never billed for render_timeout, for internal_error, or for any request that was rejected before it reached the browser — bad JSON, a revoked key, a rate limit, a quota stop.
Extraction follows the same rule with one difference in your favour: a PDF that turns out to have no text layer — a scan — returns extraction_failed and is not billed. Finding that out takes about twenty milliseconds a page, and charging for a no is not a business.
Crossing your limit
On a paid plan nothing stops. You keep rendering and the extra renders accrue as overage, because a job that fails at 2am because of a counter is worse than a small invoice. On the free plan the 101st render returns 429 quota_exceeded. Either way GET /v1/usage and the X-Renders-Remaining header tell you where you stand before you get there.
Data retention
Rendered PDFs are deleted once their signed URL expires — 24 hours by default. Render records (id, status, size, duration, error code) are kept indefinitely as billing history. We do not keep your HTML.