Skip to content

Limits and usage

You control three kinds of limits: how much each workspace may render, how big one document may be, and how many requests one address may send. Every limit and its default is in limits.

Only platform administrators can change allowances. Everyone else sees them read-only.

  1. In Studio, choose the workspace in the workspace switcher.
  2. Open Manage → Render limits.
  3. Change Maximum outstanding renders, Renders per minute, Documents per month, File storage (MB) or Test renders per day, then choose Save limits. Leave the last three empty for unlimited, which is the default.

The change applies to the next request, with no restart. Lowering a value lets renders already accepted finish, and refuses new ones until the workspace is below the new value. Each change is recorded in the workspace’s audit history. To change allowances over HTTP, see the endpoints under platform administrators.

Allowances decide what is accepted, not how fast it runs. If a workspace often gets 429, raise its allowances. If renders wait long before they start, add workers. Which requests count is in render allowances.

Test renders don’t use these allowances. Every workspace has a separate test allowance of 10 outstanding and 10 per minute, or its own allowance if lower. It can’t be raised.

On the same page, turn on Suspended and choose Save limits. The workspace then renders nothing and refuses its API keys, while its members can still sign in, read and export its data. Turn it off to restore the workspace. Both are recorded in its audit history.

Workers take turns between workspaces: every workspace’s first waiting render runs before any workspace’s second. A workspace with a long backlog does not make the others wait behind all of it. No capacity is reserved per workspace, so when the others are idle, one workspace can use every worker.

These apply to every render in every workspace. A document over one fails with LIMIT_EXCEEDED, except one that needs more than RENDER_MAX_HEAP_BYTES, which fails with RENDER_FAILED.

Setting What you can do Where
RENDER_TIMEOUT_MS (render time) Set 1 second to 1 hour .env
RENDER_MAX_PAGES, RENDER_MAX_OUTPUT_BYTES, RENDER_MAX_INPUT_BYTES Only lower them compose.override.yaml
RENDER_MAX_WASM_BYTES, RENDER_MAX_HEAP_BYTES (memory for one render) Raise or lower them compose.override.yaml

How to use compose.override.yaml is in advanced settings. Then run docker compose up -d.

The limit on requests each client address may send to /v1/ is API_RATE_LIMIT_PER_MINUTE, set in compose.override.yaml (see API settings). Raise it when many clients share one address, such as servers behind one NAT gateway.

If a CDN or load balancer sits in front of the server, all clients appear to share its address until you set TRUSTED_PROXY_RANGES. The other request rates, such as sign-in, imports and template previews, cannot be changed.

Each workspace has a daily usage record. It is kept after old renders are deleted, so it is the long-term history of how much a workspace rendered.

Counter Counts
rendersSucceeded Renders that produced a PDF
rendersFailed Renders that failed, including timeouts
rendersCancelled Renders cancelled while queued or processing
pages Pages in the PDFs of succeeded renders
outputBytes Bytes of the PDFs of succeeded renders

A render is counted once, on the UTC day it finishes, test renders included. XLSX reports and string renders create no render and are not counted.

In Studio, open Manage → Render limits: This month’s usage shows the current month. Over HTTP, call GET /v1/usage with an API key that has the usage:read scope:

Terminal window
curl "https://pdf.example.com/v1/usage?from=2026-09-01&to=2026-09-30" \
-H "x-api-key: $API_KEY"

from and to are YYYY-MM-DD days, both included, and default to the current UTC month. A range can span at most 366 days. The response has totals for the range and a days list that leaves out days with no usage; see the API reference.

Platform administrators can call GET /v1/platform/usage with their Studio session. It takes the same from and to, and returns one page of workspaces with usage in the range, each with the same counters. Paging is in the API reference.