Your HTML template, your data, a finished PDF.
Send the template you already have and the JSON you already have. Get back a production-ready file. No headless Chrome to keep alive, no render queue to babysit, no font that mysteriously disappears in production.
100 renders a month on the free tier. No credit card.
curl -X POST https://emitforge.com/v1/pdf \
-H "Authorization: Bearer $KEY" \
-d '{
"template": "<h1>Invoice {{n}}</h1>",
"data": { "n": "2026-014" },
"format": "A4"
}'
{
"id": "rnd_8fk21c",
"url": "https://…/rnd_8fk21c.pdf?token=…",
"bytes": 48213,
"expires_at": "2026-08-27T18:00:00Z"
}
Try it before you sign up
Paste HTML, get the PDF. No key, no card. This is the same Chromium the API uses — what you see here is what your customers get.
Up to 64 KB, 10 renders a day, nothing stored. Placeholders like {{name}} are an API feature — the playground renders HTML as-is.
What this replaces
Every team that needs documents ends up building the same thing. It is never the interesting part of the product.
A browser you have to operate
Puppeteer works on your laptop and then meets serverless memory limits, cold starts and a binary that does not fit. Keeping Chromium healthy in production is a job nobody was hired for.
Fonts that vanish
The layout is perfect locally and wrong on the server, because the container has no fonts. We render with the fonts embedded in your template.
A queue for something that takes a second
Document generation gets a worker, a queue and a retry policy because it blocks a request. One POST that returns a URL removes the whole apparatus.
Templates locked inside code
The template is HTML you own and can edit without a deploy. The data is JSON. Nothing proprietary in between.
The API
One shape for everything: structured input, finished artifact. Two of the three endpoints are still being built — they are marked so, and you should not plan around them yet.
POST /v1/pdf Available
{
"template": "<html>…</html>",
"data": { "customer": "Acme" },
"format": "A4",
"margin": "18mm"
}
Handlebars-style placeholders. Page breaks and repeating table headers supported; page footers and “page X of Y” are not.
POST /v1/image Building
{
"template": "<div class='card'>…",
"data": { "title": "Release 2.4" },
"width": 1200, "height": 630
}
Same engine, same template language. For social cards, certificates and receipts.
POST /v1/convert Planned
{
"file_url": "https://…/contract.docx",
"to": "pdf"
}
Not built yet. Listed here so you know where this is going, not so you can plan around it.
If you do not write code
The API is a plain HTTP POST, which means it already works inside the automation tools you use. No custom node to install.
n8n
Drop an HTTP Request node, point it at the endpoint, map your fields. A ready-made invoice workflow is in the n8n template library: Google Sheets in, one PDF per client out, delivered by Gmail, Drive and Slack.
Zapier
Works today through Webhooks by Zapier, which needs a paid Zapier plan — their webhooks app is not on the free tier. We have no native Zapier app, so that step is manual.
Make
Use the HTTP module with a JSON body. The response gives you a URL you can pass straight into an email or storage module.
Pricing
Priced per render, with the limits written down. A render is one document. Files larger than 5 MB count as two.
- 100 renders per month
- No credit card
- PDF endpoint
- 10-second timeout
- Community support by email
- 5,000 renders per month
- All available endpoints
- 10-second timeout
- Email support, one business day
- Hard stop at 5,000 — no surprise overage
- Fair unlimited — no hard cap
- 1 render = 1 document; over 5 MB counts as 2
- Sustained use above 50,000 renders a month starts a conversation, not a shutdown
- All available endpoints
- Email support, same business day
- Everything in Flat
- Two months not charged
- Billed once a year
- Cancel any time, effective at renewal
Prices in US dollars, excluding any tax that applies where you are. Where we are required to collect VAT, GST or sales tax in your location, it is calculated and shown at checkout before you confirm.
Who charges you
Orders are sold by FLUXIUM LTDA, the company that operates emitforge, and payments are processed by Stripe. We issue your invoice and handle any tax that applies. Billing questions and product questions go to the same place: contato@fluxium.pro.
On your card statement this appears as FLUXIUM — Fluxium is the company that operates emitforge and the seller of record.
The guarantee
If the API does not do what this page says, ask for a refund within 30 days of your first payment and you get it, no explanation required. That is more generous than the standard 14-day window. Details on the refund page.
Cancelling
Cancel, change plan, update your card or download invoices at emitforge.com/account — it opens your billing portal with your API key, no ticket needed. Cancellation takes effect at the end of the period you already paid for. Nothing renews after that. If you would rather write to a person: contato@fluxium.pro.
Who is behind this
emitforge is built and operated by Fluxium, a small software shop in Brazil. It is new — there is no customer list to show you and no volume number to quote, and inventing either would be the fastest way to lose a developer's trust.
What there is instead: an endpoint you can call, limits written down before you ask, a refund window longer than the industry default, and a person who answers contato@fluxium.pro. If something breaks, you are not filing a ticket into a queue — you are emailing the person who wrote the renderer.
Questions
Including the ones that are inconvenient to answer.
The PDF endpoint is live and is what you should judge us on. The image endpoint is being built and the conversion endpoint is planned. We label them that way on purpose — do not plan a launch around an endpoint marked "Building".
The template and data you send are processed and not kept after the response. The generated file sits behind a signed URL and is deleted after 24 hours — the link stops working at the same time. Request logs keep metadata — never the payload body — for 90 days.
No. It is deterministic rendering — the same input produces the same file every time. No model is involved anywhere in the pipeline, which is exactly what you want in a document that a customer will receive.
There is no hard cap and no throttle waiting to surprise you. One render is one document; a file over 5 MB counts as two. If your sustained use passes 50,000 renders a month we will write to you and work something out. We will not silently cut you off, and we will not pretend the word "unlimited" has no limit.
Use it inside your own product freely — that is what it is for. Re-exposing the API as a competing rendering service needs a written agreement first. Ask and we will talk.
There isn't one, and anyone new who offers you one is guessing. We use commercially reasonable efforts and no service credits are offered on self-serve plans. When there is enough operating history to publish a real status page, we will publish it.
Anywhere Stripe can process a card payment, which is most of the world. Prices are in US dollars; your bank converts at its own rate. Where we are required to collect tax in your location, it is shown at checkout before you confirm.
Send one request and see
The free tier exists so you can find out whether this fits before any money changes hands. Ask for a key and you get one.