DocuForge is an invoicing tool with two front doors. Developers get a fast HTTP API that hydrates HTML templates with JSON and compiles them to PDF using a native Rust renderer, no headless browser and no subprocess involved. Freelancers and small teams who would rather not touch JSON get a simple web form with their own logo, brand color, and company name built in. Try the live demo below, or sign up for a free account to build real invoices.
Accounts, API keys, and quotas are real and backed by SQLite. Async delivery via webhooks and object storage is still on the roadmap, marked clearly below.
A real form, not JSON. Fill in a client and some line items, and a saved brand profile (company name, color, logo) is applied automatically.
Register HTML/CSS templates with minijinja placeholders via POST /v1/templates, then hydrate any of them with a JSON dictionary.
EU/SEPA accounts get a scannable IBAN QR code pre-filled with the exact amount due. Outside SEPA (e.g. US banks), invoices fall back to spelled-out international wire details — no payment processor involved either way.
Direct byte streaming for instant download: Content-Type: application/pdf, ready to pipe to disk or a browser tab.
Paid API keys are issued via Stripe Checkout. Free-tier monthly usage is tracked in SQLite, and both are enforced on every request.
options.async plus Redis-backed jobs and S3/R2 upload for large batch runs. Currently returns a clear 400.
Every invoice runs through the same Rust renderer. The only difference between plans is the watermark and the monthly cap.
POST /v1/render callsThe exact request the playground above sends, and what comes back.
POST /v1/render
Content-Type: application/json
Authorization: Bearer <your_api_key>
{
"template_id": "tpl_inv_98231",
"data": {
"invoice_number": "INV-2026-001",
"amount_due": "€1,250.00",
"client_name": "Acme Corp",
"iban": "BE68539007547034",
"line_items": [
{"desc": "Web Development Services", "qty": 1, "price": 1250.00}
]
},
"options": {
"page_size": "A4",
"margin": "15mm",
"async": false
}
}
HTTP/1.1 200 OK
Content-Type: application/pdf
X-Render-Engine: rust-core
X-Render-Time-Ms: 298
<raw PDF bytes>