DynamicDocumentAPI

Plans and limits

Plan prices and included renders, the render table, auto top-ups, the monthly top-up limit and render packs, payments, and every rate, size and timeout limit per plan.

View as Markdown

Usage is measured in renders: one render is one generated document or image of up to 50 pages. Each plan includes a monthly number of renders and a set of technical limits. The pricing page shows what each plan includes and what one render costs on each.

Plans

Prices are in euros (€) and exclude VAT, which Stripe adds at checkout based on your location. Annual billing costs 20 % less and is shown here as the effective monthly price.

PlanMonthlyAnnual (per month)Renders per monthAuto top-up (1,000 renders)TemplatesMembersFile retention (maximum)
Free€0€050not available217 days
Starter€19€153,000€6.00unlimited390 days
Growth€59€4715,000€4.00unlimited101 year
Pro€149€11950,000€3.00unlimited25forever
Scale€399€319200,000€2.00unlimitedunlimitedforever
Enterprisefrom €1,500custom1,000,000 and upfrom €1.20unlimitedunlimitedforever

PDFs and images are available on every plan. Every paid plan includes the whole generation feature set: templates and versioning, webhooks, test mode, zero-retention delivery, signed links, batches and your own storage buckets. From Growth, plans also include compliance output: PDF/A, PDF/UA and e-invoices. Higher plans add organisational capacity: more members, longer log retention and higher technical limits.

The Free plan stops when its 50 renders are used; it has no auto top-ups.

What counts as a render

OperationBilled renders
PDF render (template, HTML, URL, Markdown or canvas), up to 50 pages1
Each additional 50 pages of the same PDF+1
Image render (PNG, JPEG or WebP)1
PDF tool call (POST /v1/pdf-tools/…): merge, split, rotate, protect, unlock, metadata or PDF/A conversion1
E-invoice layer on top of a PDF render (Factur-X, ZUGFeRD, XRechnung)included (+0)
E-invoice XML export (POST /v1/einvoices)1
Batch ZIP download0 (the renders inside are already billed)
Batch merged PDF (batches)1
Signed-link render: cache miss / cache hit1 / 0
Test renders, editor previews, failed and canceled renders0

Examples: a 12-page invoice is 1 render, and so is the same invoice as a Factur-X e-invoice; a 120-page report is 3 renders (50 + 50 + 20 pages); a social image in two sizes is 2 renders. PDF/A output on a render costs nothing extra.

Nothing is billed for renders that fail, renders canceled before rendering started, or renders rejected with page_limit_exceeded. The number billed is recorded per render in the render object's billed_renders field and in the X-Billed-Renders header of binary responses.

Included renders reset at the start of each billing cycle and don't roll over. Rollover of unused renders on annual plans is planned.

Auto top-up and monthly top-up limit

Paid plans are never billed for overage. Instead they use auto top-up: when fewer than 200 renders (the default; high-volume workspaces can ask support for a higher number) are left in your workspace (included renders plus any prepaid renders), we add 1,000 renders for your plan's top-up price excl. VAT so your renders keep working: €6 on Starter, €4 on Growth, €3 on Pro and €2 on Scale. Stripe (via Link) charges your card within about 24 hours. Unused renders roll over and expire after 12 months. The renders are available at once, and you get an email for every top-up. The API calls auto top-ups render_blocks.

  • Renders are drawn from the included allowance first, then from prepaid renders with the earliest expiry.
  • A new top-up is only added after the previous one has been paid. If a payment fails, no further top-ups are added until it succeeds.
  • Top-ups already bought keep their renders and price when you change plans.

The monthly top-up limit is the most your workspace can spend per cycle on the plan plus auto top-ups. It defaults to twice your plan's monthly price and you can change it; 0 turns auto top-ups off. On Growth, for example, the default limit of €118 leaves €59 for top-ups: it allows up to 14 top-ups, or 14,000 extra renders, per cycle. The API calls it the spend cap (spend_cap_cents).

When no top-up can be added (the monthly top-up limit is reached, auto top-ups are off, or a top-up payment is outstanding) and the renders run out, live renders fail with 402 render_limit_reached; test keys continue to work.

You are notified by email, and by the usage.threshold_reached webhook event, at 50 %, 80 % and 100 % of the included renders and when the monthly top-up limit stops further top-ups.

Render packs (Free plan)

Render packs are prepaid renders for the Free plan: 10,000 renders for €50, 50,000 for €200 and 250,000 for €750 (excluding VAT), each valid for 12 months. Packs bought on Free stay usable after you upgrade. Paid plans top up automatically instead and cannot buy packs.

Payments, receipts and tax

Payments are processed by Stripe. Link (by Stripe) is the seller of record: your receipts and invoices come from Link, and card statements show LINK.COM*. All prices exclude VAT; Stripe calculates the applicable VAT or sales tax from your location, adds it at checkout and collects it. You are charged in euros. Enter your VAT or other tax ID at Stripe Checkout; it then appears on your invoices.

Check your usage

GET /v1/account returns the plan, the current cycle, renders and the limits that apply to your workspace:

{
  "workspace": { "id": "ws_01J9ZK0P2R4T6V8X0Z2B4D6F8H", "name": "Example GmbH" },
  "plan": { "code": "growth", "interval": "month" },
  "cycle": { "start": "2026-09-01T00:00:00Z", "end": "2026-10-01T00:00:00Z" },
  "renders": {
    "included": 15000,
    "used": 4211,
    "remaining_included": 10789,
    "prepaid_remaining": 0,
    "spend_cap_cents": 11800
  },
  "limits": {
    "rate_limit_rps": 20,
    "sync_concurrency": 20,
    "sync_timeout_s": 60,
    "max_payload_mb": 10,
    "max_pages": 500,
    "bulk_concurrency": 10
  },
  "regions": ["eu"]
}

prepaid_remaining counts the renders left in render packs and auto top-ups. spend_cap_cents is the monthly top-up limit in euro cents, excluding VAT; 0 means auto top-ups are off.

GET /v1/usage?from=2026-09-01&to=2026-09-30&granularity=day&group_by=template_id returns a time series of billed renders and render counts, which is handy for internal cost dashboards. Both endpoints need the account:read scope.

Limits by plan

LimitFreeStarterGrowthProScaleEnterprise
Rate limit (sustained / burst per second)2 / 510 / 2020 / 4050 / 100150 / 300custom
Concurrent sync renders2102050150custom
Sync timeout30 s60 s60 s90 s120 s300 s
Async maximum duration60 s5 min10 min15 min30 mincustom
Request body2 MB10 MB10 MB20 MB50 MBcustom
Pages per PDF202005001,0002,000custom
Remote assets per render502002005001,000custom
Bulk concurrency—2102050custom
Batch items—5002,00010,00050,000custom
File retention (maximum)7 days90 days1 yearforeverforeverforever
Request log retention—7 days7 days30 days90 dayscustom
Test renders per minute106060120300custom
Team members131025unlimitedunlimited
PDF/A, PDF/UA and e-invoicing——✓✓✓✓

The template engine's execution budget also scales with the plan, from 50,000 units on Free to 20 million on Scale. See sandbox and limits.

One person can own up to two workspaces on the Free plan. Paid workspaces don't count, but a free workspace you deleted in the last 30 days still does, and so does one you take over from someone else. To add another, upgrade one of your workspaces to a paid plan.

Limits on every plan

LimitValue
metadata50 keys per render, values up to 500 characters
Idempotency-Key255 characters; responses are replayed for 24 hours
binary delivery20 MB
base64 delivery10 MB
Signed URL lifetime60 seconds to 7 days, 1 hour by default
data_url document50 MB
Rendered HTML per template50 MB
Template recursion depth50
Fixed wait delay (wait.delay_ms)10 seconds
Custom headers per webhook endpoint10
Webhook response time10 seconds
Webhook delivery log30 days
Uploaded files50 MB each, kept for 24 hours

What happens when you hit a limit

LimitResponseWhat to do
Free renders used up, or no auto top-up can be added (monthly top-up limit reached, auto top-ups off, top-up payment outstanding)402 render_limit_reachedFree: upgrade, buy a render pack or wait for the next cycle. Paid: raise the monthly top-up limit or settle the open payment
Requests per second429 rate_limited with Retry-AfterBack off and spread requests out
Concurrent sync renders429 concurrency_limited with Retry-AfterLower parallelism or switch to mode: "async"
Sync timeout202 with the render still running, or 408 render_timeout with timeout_behavior: "cancel"Poll the render or wait for the webhook
Async maximum durationThe render ends as failed with render_timeoutSimplify the document or split it
Request body413 payload_too_largeSend less data, or use data_url
Output size for the delivery type413 output_too_largeUse url delivery
Pages per PDF422 page_limit_exceeded, nothing billedCheck the data volume, split the document, or upgrade
Remote assets per renderFurther asset requests are blocked and reported as warningsReduce the number of remote assets or inline them
Template execution budget422 template_fuel_exhaustedSimplify loops or precompute values
Test renders per minute429 rate_limitedSlow down test loops in CI

See Errors for the full list of codes and fixes.

On this page