Frequently asked questions

Short answers about what BrewMyPDF does, what it costs, and where it stops. The limits below are read from the running code, so they are what the service actually enforces.

Before you start

What is BrewMyPDF?
You design a template once, then send data to it and get a PDF back. Design in the visual editor, then call it from your code over the REST API — or let an AI assistant call it over MCP. It is built for documents you generate many times with different data: invoices, receipts, certificates, reports, labels.
How much can I do for free?
The Free plan gives you 50 PDFs a month and 3 saved templates, with no card required. Everything else — the editor, the API, MCP, batch — works the same as on paid plans. Free also caps you at 10 PDFs a day, so a runaway script cannot spend a whole month in one afternoon.
Can I try it without signing up?
Not really — an account is required. The editor, saved templates and the API all sit behind sign-in, so there is no anonymous sandbox. Signing up is free and takes no card, and the Free plan is enough to build a template and render it end to end, so trying it out costs nothing but an email address.

Building and the editor

Which paper sizes can I use?
A4 794×1123 · A5 559×794 · LETTER 816×1056 · LEGAL 816×1344 (width × height in pixels, portrait). Landscape swaps the two. Sizes are in pixels at 96 DPI because the editor is a pixel canvas — a page is the same size wherever you open it, so what you position is what prints.
Where do I change margins, headers and footers?
In the page section of the right-hand panel. It is always there, whatever you have selected, because these settings apply to every page rather than to one element. Margins, header, footer, paper size and orientation all live in it. Headers and footers repeat on every page; the page body flows between them.
How many rows can a table have?
One render draws at most 2,000 rows in total. A single table stops at 500 rows on its own, and every repeating table shares the 2,000 — whichever limit runs out first is where rows are dropped. So 4 full tables of 500 rows each use up the entire budget, and a table after those draws nothing at all. Repeating blocks that open a new page are a separate budget of 100 and do not eat into rows. Rows beyond the budget are dropped and the job records a truncation warning — so read the warnings on the job rather than assuming everything fit. The separate ceiling of 20,000 rendered elements per document behaves differently: exceeding it fails the render outright instead of shrinking it. A row with very many columns reaches that ceiling well before 2,000 rows.
Is there a size limit on images?
An image you place in a template is capped at 320KB. A PDF or PNG used as a page background is capped at 2MB. Larger files are rejected at upload, not at render, so you find out while you are editing rather than in production.
How large can one template get?
A saved template is capped at 1MB of document JSON — and images you place in it count towards that, because the editor embeds them in the document as base64 rather than storing them separately. Base64 costs about a third more than the original file, so two images near the 320KB ceiling already take a large share of the budget. What does not count is the data you send at render time. If you run out of room, use fewer or smaller images, or move repeated content into a repeating section.
Is my work saved automatically?
No — nothing is stored until you press Save. That is deliberate: every save keeps the previous state as a version, and autosaving would bury the versions worth returning to under hundreds of automatic ones. The trade-off is real, so treat it as one: if you close the tab with unsaved changes, those changes are gone.

API and MCP

How do I authenticate?
Create an API key in the console and send it as `Authorization: Bearer <api_key>`. Keys are shown once, at creation — we store only a hash, so we cannot show it again. If you lose one, delete it and make a new one. MCP uses the same key.
Is there a rate limit?
Yes, on three axes: 120 requests per minute per API key, 300 per account, and 300 per source IP. Going over returns HTTP 429 with a `retry-after` header telling you how long to wait. This is separate from your monthly quota — waiting fixes a 429, but it does not fix a used-up quota.
How big can a request be?
Up to 10MB. Over that you get HTTP 413 before the request is processed. If your data is genuinely that large, it is usually a batch that should be split, or images that should be uploaded once as assets and referenced by the template instead of inlined into every request.
Can I make several PDFs in one call?
Yes. One batch takes up to 50 items as separate PDFs, or up to 20 items merged into a single PDF. The whole batch is checked against your remaining quota before any of it starts — if it does not fit, nothing runs, so you never get a half-finished batch that is awkward to retry or refund.
When should I use async instead of sync?
Use sync when you are generating one document and want the bytes back in the same request — a receipt at checkout, a ticket after booking. Use async when the document is heavy, when you are sending a batch, or when your caller cannot wait: you get a job id immediately, then poll it or receive a webhook when it is done.

Billing and cancellation

What happens when I hit my limit?
New renders are refused until the quota resets or you upgrade; nothing you already made is touched or hidden. The refusal is an error, not a silent empty PDF, so your integration can tell the difference. Your current usage is on the subscription page and also available from the API, so you can watch it approach rather than discover it at the wall.
How do I cancel?
Open the subscription page and use Manage subscription, which takes you to our payment provider’s portal. Cancelling stops the next charge; you keep the paid plan until the end of the period you already paid for, then drop to Free. Your templates stay — a Free account keeps working, just with Free limits.
Can I get a refund?
Yes, within 15 days of a payment, if you have not used the service since that payment. Used means you generated at least one file or created at least one template after it — deleting them afterwards still counts as used. Eligible refunds are the amount paid less the processing fee charged by our payment provider, and are processed within 10 business days to the original payment method. Ask through the contact form.

Output and data

How long are my finished PDFs kept?
Download links are signed and short-lived — 10 minutes by default, and at most 24 hours if you ask for longer. The stored file itself is removed on a 7-day schedule. Treat BrewMyPDF as the place documents are made, not the place they are archived: download what you need to keep.
Do you store the data I send?
On success the request payload is deleted as soon as the render finishes. On failure it is kept for 24 hours so you can retry the job, then deleted. We keep it that long because we used to delete it the instant a job failed, which made retry impossible — the job existed but its input was already gone.
Where is my data stored?
On Cloudflare’s network. On Premium · Business, stored files are pinned to EU jurisdiction, so rendered output and request payloads stay in the EU. Account records live in our primary database in either case.
I deleted a template by mistake — can I get it back?
Earlier versions, yes — but through the API for now: `GET /v1/templates/<template_id>/versions` lists them and `POST /v1/templates/<template_id>/versions/<version_id>/restore` puts one back. There is no version list in the console yet. A deleted template is not destroyed immediately, but there is no self-serve undelete — contact us and we can look. Deleting your account is different: that is a real erasure and cannot be undone.
What happens if I delete my account?
Everything tied to it goes: templates, versions, API keys, stored files, job history and any messages you sent us. It is not a deactivation and there is no recovery window, so export anything you want first. Cancel your subscription before deleting so you are not charged again.

When you get stuck

401 — invalid or missing API key
The key was missing, mistyped, or has been deleted. Check that you are sending `Authorization: Bearer <api_key>` and that the key still exists in the console. We deliberately do not say which of those it was: telling an attacker that a key exists but is wrong is a hint we would rather not give.
429 — rate limit exceeded
You sent requests faster than the per-minute limit. Read the `retry-after` header and wait that long — retrying immediately just extends the block. If you hit this steadily rather than in bursts, batch your calls instead of looping one request at a time.
413 — payload too large
The request body exceeded the size limit. The usual cause is images pasted into the request as base64 on every call; upload them once as assets and reference them instead. The second most common cause is one batch that should be two.
400 — the template document is not valid
The template JSON did not match the document schema — most often a wrong top-level shape, an unknown node type, or a property with the wrong value type. The response carries the error code only and does not name the offending field, so check your template against the schema reference in the docs, which lists every node type and its allowed values.

Account and security

I forgot my password
Use the forgot-password link on the sign-in page and we will email you a reset link. Setting a new password signs out your other sessions, which is intended — if someone else had access, the reset ends it.
The verification email never arrived
Check spam first; automated mail from a new domain often lands there. You can request a new one from the sign-in page — the newest link is the valid one, so if several arrive, use the last. If nothing comes through after that, contact us and we will check whether it was sent and what happened to it.
Is my card information safe?
We never see it. Payments go through Stripe, and your card details are entered on their pages and stored by them. What we keep is a customer reference, your plan, and the period it covers — enough to know what you are entitled to, and nothing that could be used to charge a card.