Early access · PDF endpoint first

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.

You send
curl -X POST https://emitforge.com/v1/pdf \
  -H "Authorization: Bearer $KEY" \
  -d '{
    "template": "<h1>Invoice {{n}}</h1>",
    "data": { "n": "2026-014" },
    "format": "A4"
  }'
HTML invoice-template.html your markup, your CSS, your fonts
You get
{
  "id": "rnd_8fk21c",
  "url": "https://…/rnd_8fk21c.pdf?token=…",
  "bytes": 48213,
  "expires_at": "2026-08-27T18:00:00Z"
}
PDF invoice-2026-014.pdf A4 · 47 KB · link valid for 24h
Real Chromium The CSS you test in your browser is the CSS we render. Flexbox, grid, page breaks. One caveat worth knowing: the renderer has a single font installed, so embed any other typeface as a data URI.
10-second hard timeout Every render is capped. A runaway template fails fast instead of burning your quota.
Links expire after 24h We return a signed link, not a permanent archive. After it expires the file cannot be retrieved. Your payload is never stored beyond the request.
No credit card to start 100 renders a month, free. You find out whether it works before you pay anything.

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.

PDF
Your PDF appears here. The first render wakes the renderer and can take a few seconds; the next ones are faster.

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

In
{
  "template": "<html>…</html>",
  "data": { "customer": "Acme" },
  "format": "A4",
  "margin": "18mm"
}
Out
PDF A signed URL to the fileplus id, byte size and expiry

Handlebars-style placeholders. Page breaks and repeating table headers supported; page footers and “page X of Y” are not.

POST /v1/image   Building

In
{
  "template": "<div class='card'>…",
  "data": { "title": "Release 2.4" },
  "width": 1200, "height": 630
}
Out
PNG A signed URL to the imagePNG or JPEG, exact pixel dimensions

Same engine, same template language. For social cards, certificates and receipts.

POST /v1/convert   Planned

In
{
  "file_url": "https://…/contract.docx",
  "to": "pdf"
}
Out
PDF The same document, as PDFDOCX, XLSX and PPTX in

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.

Free
$0
  • 100 renders per month
  • No credit card
  • PDF endpoint
  • 10-second timeout
  • Community support by email
Start free
Starter
$29 / month
  • 5,000 renders per month
  • All available endpoints
  • 10-second timeout
  • Email support, one business day
  • Hard stop at 5,000 — no surprise overage
Flat
$89 / month
  • 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
Flat, annual
$290 / year
  • 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.

Is this ready for production?

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".

What happens to my documents?

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.

Does it use AI?

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.

What does "fair unlimited" actually mean?

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.

Can I self-host or resell it?

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.

What is your uptime guarantee?

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.

Which countries can buy?

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.