# Formfeed > Formfeed is an API that renders PDFs and images from HTML templates written in Jinja2, Liquid or Handlebars and JSON data, and fills Word and PowerPoint files that carry the same tags. Rendered in Frankfurt, stored in the EU, priced in EUR. It has a browser editor with autocomplete and a paginated preview in which the wording can be edited, a canvas that designs image templates and writes them as ordinary HTML templates (beta), a CLI for templates as files, SDKs for TypeScript and Python, and an MCP server for AI agents. Key facts: - Render: `POST https://api-eu.formfeed.dev/v1/renders` with `Authorization: Bearer ff_live_…` (or `ff_test_…`, not metered) and `{"template": "", "data": {…}, "output": …}`. `output` is `pdf`, `png`, `jpg` or `webp` for HTML templates (kinds `pdf` and `image`), `docx` or `pdf` for Word templates (kind `docx`) and `pptx` or `pdf` for PowerPoint templates (kind `pptx`); without it the template decides. The response has `download_url`, `page_count` and `units`. - Convert: `POST https://api-eu.formfeed.dev/v1/pdf/convert` with a `multipart/form-data` field `file` (DOCX, XLSX, PPTX, ODT, ODS, ODP, DOC, XLS, PPT, RTF or HTML, up to 20 MB, not stored) turns an office document into a PDF render. Word and PowerPoint templates and conversion are on the Starter plan and above; Free can create office templates and test-render them to PDF. - E-invoices: put the invoice in `data._invoice` and add `"post": {"einvoice": {}}` (or declare it in the template's settings); the PDF becomes a ZUGFeRD / Factur-X invoice, a PDF/A-3b that carries `factur-x.xml`. The block is checked against the rules of EN 16931 before anything renders and the finished file is validated before delivery; a file that fails is not delivered. Live e-invoices are on the Starter plan and above; test keys make a limited number a day, with a test mark. - One unit is a PDF of up to five pages (each further five pages add one), one image or one DOCX/PPTX file. A PDF from a Word or PowerPoint template and a conversion follow the PDF rule; merge, protect and watermark cost half a unit each, and an e-invoice adds one unit to its render. Test keys use no units. - MCP server: `npx -y @formfeed/mcp` with `FORMFEED_API_KEY` (Node.js 22+). Tools: list_templates, get_template_schema, validate_template (free, checks the data against the template schema), check_invoice (free and offline, checks the _invoice block of an e-invoice against EN 16931), render (with einvoice, the PDF is a ZUGFeRD / Factur-X e-invoice), convert_to_pdf (office documents to PDF), get_render, get_workspace. Hosted: https://mcp.formfeed.dev/mcp with an API key or a sign-in (OAuth; the workspace is chosen at consent), https://mcp.formfeed.dev/mcp/ to pin another workspace. - Packages: `@formfeed/sdk` and `formfeed` (CLI) on npm, `formfeed` on PyPI, `@formfeed/mcp`, `n8n-nodes-formfeed`. ## Docs - [Quickstart](https://docs.formfeed.dev/getting-started/quickstart): first render in five minutes - [API overview](https://docs.formfeed.dev/api/overview): authentication, sync and async renders, errors - [Template languages](https://docs.formfeed.dev/templates/languages): Jinja2, Liquid and Handlebars side by side - [Visual editor](https://docs.formfeed.dev/templates/visual-editor): image templates designed on a canvas, text bound to data and fitted to its box, the HTML the canvas writes - [Word and PowerPoint templates](https://docs.formfeed.dev/templates/office-templates): tags in your own .docx or .pptx, outputs, pictures and codes - [PDF tools](https://docs.formfeed.dev/api/pdf-tools): merge, watermark, protect and convert office documents - [Helper reference](https://docs.formfeed.dev/templates/helpers): money, date, qrcode, barcode, epcQr, chart, image, t and more - [MCP server](https://docs.formfeed.dev/integrations/mcp): tools and transports - [CLI](https://docs.formfeed.dev/cli/commands): validate, test, dev, render, templates pull and push, pdf convert, import - [Source of the published packages](https://github.com/formfeed-dev/formfeed): SDK, CLI, engine, MCP server - [The whole documentation as one file](https://docs.formfeed.dev/llms-full.txt): every page above and the rest, in plain text ## AI agents - [AI agents overview](https://formfeed.dev/agents): MCP setup, tools, example prompts, multi-tenant use - [Claude Code](https://formfeed.dev/agents/claude-code): One command in the terminal. Claude Code renders documents and, with the CLI, edits and tests your templates as files. - [Claude Desktop](https://formfeed.dev/agents/claude-desktop): Ask for an invoice or a certificate in a chat and get the PDF link back. Local server, one config file. - [Cursor](https://formfeed.dev/agents/cursor): Cursor’s agent renders documents from your templates while it works on the code that sends the data. - [VS Code (GitHub Copilot)](https://formfeed.dev/agents/vscode): Copilot’s agent mode with Formfeed tools. VS Code asks for the key once and stores it securely. - [Windsurf](https://formfeed.dev/agents/windsurf): Windsurf has been called Devin Desktop since June 2026. Its agent gets the Formfeed tools from one JSON file. - [OpenAI Codex CLI](https://formfeed.dev/agents/codex): Add Formfeed to Codex with `codex mcp add` or a few lines of TOML. - [Gemini CLI](https://formfeed.dev/agents/gemini-cli): Formfeed tools in Google’s terminal agent, configured in settings.json. - [Zed](https://formfeed.dev/agents/zed): Context servers in Zed’s settings give its agent the Formfeed tools. - [Cline](https://formfeed.dev/agents/cline): Auto-approve the free tools, keep renders behind a confirmation. - [Claude Agent SDK](https://formfeed.dev/agents/claude-agent-sdk): Build your own agent on Claude Code’s harness and hand it the Formfeed tools. - [Claude API](https://formfeed.dev/agents/anthropic-api): Use the local server with the SDK’s tool runner today, or let the API connect to the hosted endpoint. - [OpenAI Agents SDK](https://formfeed.dev/agents/openai-agents-sdk): `MCPServerStdio` starts the Formfeed server; the agent lists and calls its tools. - [Vercel AI SDK](https://formfeed.dev/agents/vercel-ai-sdk): `createMCPClient` turns the Formfeed tools into AI SDK tools for any model provider. - [LangChain and LangGraph](https://formfeed.dev/agents/langchain): The MCP adapters load the Formfeed tools as LangChain tools for any agent or graph. - [Mastra](https://formfeed.dev/agents/mastra): `MCPClient` from `@mastra/mcp` gives a Mastra agent the Formfeed tools. - [CrewAI](https://formfeed.dev/agents/crewai): Give a crew member the Formfeed tools with one `mcps` entry. - [Plain tool calling](https://formfeed.dev/agents/function-calling): No MCP at all: wrap one Formfeed call in a tool with a strict schema. Best when the agent only ever makes one kind of document. - [n8n AI Agent](https://formfeed.dev/agents/n8n-ai-agent): Run the MCP server next to your n8n instance and attach it to the AI Agent node with the MCP Client Tool. ## Examples - [Template examples](https://formfeed.dev/examples): complete template folders with data and requests - Every example opens in a workspace at `https://app.formfeed.dev/en/examples/` (the slug of its page below): after signing in, one click there creates a copy of the template, published and ready for the API. The free plan is enough. - [German invoice with GiroCode](https://formfeed.dev/examples/invoice): jinja2, pdf - [E-invoice: ZUGFeRD and Factur-X from one template](https://formfeed.dev/examples/e-invoice): jinja2, pdf - [Course certificate in Handlebars](https://formfeed.dev/examples/certificate): handlebars, pdf - [Open Graph image with Tailwind](https://formfeed.dev/examples/og-image): liquid, image - [Shipping label, 100×150 mm](https://formfeed.dev/examples/shipping-label): jinja2, pdf - [Report with a chart](https://formfeed.dev/examples/report): jinja2, pdf - [One template, many languages](https://formfeed.dev/examples/multilingual): jinja2, pdf - [Quote marked as a draft](https://formfeed.dev/examples/draft-watermark): liquid, pdf - [Confidential payslip with a password](https://formfeed.dev/examples/confidential-payslip): handlebars, pdf - [German quote (Angebot) with optional items](https://formfeed.dev/examples/angebot): jinja2, pdf - [German delivery note (Lieferschein)](https://formfeed.dev/examples/lieferschein): liquid, pdf - [German payment reminder (Mahnung) with GiroCode](https://formfeed.dev/examples/mahnung): handlebars, pdf - [German invoice correction (Rechnungskorrektur)](https://formfeed.dev/examples/rechnungskorrektur): jinja2, pdf - [German reference letter (Arbeitszeugnis) from Markdown](https://formfeed.dev/examples/arbeitszeugnis): liquid, pdf - [German certificate of attendance (Teilnahmebescheinigung)](https://formfeed.dev/examples/teilnahmebescheinigung): handlebars, pdf - [German packing list (Packliste) grouped by package](https://formfeed.dev/examples/packliste): jinja2, pdf - [German timesheet (Stundenzettel) with balance and projects](https://formfeed.dev/examples/stundenzettel): handlebars, pdf - [German cancellation confirmation (Kündigungsbestätigung)](https://formfeed.dev/examples/kuendigungsbestaetigung): handlebars, pdf - [German donation receipt (Spendenbescheinigung)](https://formfeed.dev/examples/spendenbescheinigung): liquid, pdf - [Event ticket with QR code and PDF417](https://formfeed.dev/examples/ticket): jinja2, pdf - [Name badges, eight per A4 sheet](https://formfeed.dev/examples/namensschilder): jinja2, pdf - [Gift voucher with Tailwind, as PDF and PNG](https://formfeed.dev/examples/gutschein): liquid, pdf - [Till receipt on an 80 mm roll](https://formfeed.dev/examples/receipt): liquid, pdf - [US invoice with sales tax](https://formfeed.dev/examples/us-invoice): jinja2, pdf - [Mutual NDA with numbered clauses](https://formfeed.dev/examples/nda): handlebars, pdf - [Annual report with contents and bookmarks](https://formfeed.dev/examples/annual-report): jinja2, pdf - [Résumé with a sidebar and skill ratings](https://formfeed.dev/examples/resume): handlebars, pdf - [Trade price list with EAN barcodes](https://formfeed.dev/examples/price-list): liquid, pdf - [Review card, 1080×1080](https://formfeed.dev/examples/review-card): handlebars, image - [Webinar story, 1080×1920](https://formfeed.dev/examples/event-story): liquid, image - [Metrics card with a chart, 1200×675](https://formfeed.dev/examples/metrics-card): jinja2, image ## Language guides - [Guides for your language](https://formfeed.dev/guides): complete, tested programs per language - [Generate a PDF invoice from JSON in Node.js (TypeScript)](https://formfeed.dev/guides/typescript/pdf-invoice-from-json) - [Create a ZUGFeRD / Factur-X e-invoice in Node.js (TypeScript)](https://formfeed.dev/guides/typescript/zugferd-e-invoice) - [Convert HTML to PDF in Node.js (TypeScript)](https://formfeed.dev/guides/typescript/html-to-pdf) - [Generate Open Graph images in Node.js (TypeScript)](https://formfeed.dev/guides/typescript/og-image) - [Generate PDFs from a CSV in Node.js (TypeScript)](https://formfeed.dev/guides/typescript/batch-from-csv) - [Merge PDFs and add a password in Node.js (TypeScript)](https://formfeed.dev/guides/typescript/merge-and-protect) - [Async PDF rendering with a verified webhook in Node.js (TypeScript)](https://formfeed.dev/guides/typescript/async-render-webhook) - [Generate a PDF invoice from JSON in Python](https://formfeed.dev/guides/python/pdf-invoice-from-json) - [Create a ZUGFeRD / Factur-X e-invoice in Python](https://formfeed.dev/guides/python/zugferd-e-invoice) - [Convert HTML to PDF in Python](https://formfeed.dev/guides/python/html-to-pdf) - [Generate Open Graph images in Python](https://formfeed.dev/guides/python/og-image) - [Generate PDFs from a CSV in Python](https://formfeed.dev/guides/python/batch-from-csv) - [Merge PDFs and add a password in Python](https://formfeed.dev/guides/python/merge-and-protect) - [Async PDF rendering with a verified webhook in Python](https://formfeed.dev/guides/python/async-render-webhook) - [Generate a PDF invoice from JSON in PHP](https://formfeed.dev/guides/php/pdf-invoice-from-json) - [Create a ZUGFeRD / Factur-X e-invoice in PHP](https://formfeed.dev/guides/php/zugferd-e-invoice) - [Convert HTML to PDF in PHP](https://formfeed.dev/guides/php/html-to-pdf) - [Generate Open Graph images in PHP](https://formfeed.dev/guides/php/og-image) - [Generate PDFs from a CSV in PHP](https://formfeed.dev/guides/php/batch-from-csv) - [Merge PDFs and add a password in PHP](https://formfeed.dev/guides/php/merge-and-protect) - [Async PDF rendering with a verified webhook in PHP](https://formfeed.dev/guides/php/async-render-webhook) - [Generate a PDF invoice from JSON in Go](https://formfeed.dev/guides/go/pdf-invoice-from-json) - [Create a ZUGFeRD / Factur-X e-invoice in Go](https://formfeed.dev/guides/go/zugferd-e-invoice) - [Convert HTML to PDF in Go](https://formfeed.dev/guides/go/html-to-pdf) - [Generate Open Graph images in Go](https://formfeed.dev/guides/go/og-image) - [Generate PDFs from a CSV in Go](https://formfeed.dev/guides/go/batch-from-csv) - [Merge PDFs and add a password in Go](https://formfeed.dev/guides/go/merge-and-protect) - [Async PDF rendering with a verified webhook in Go](https://formfeed.dev/guides/go/async-render-webhook) - [Generate a PDF invoice from JSON in C# (.NET)](https://formfeed.dev/guides/csharp/pdf-invoice-from-json) - [Create a ZUGFeRD / Factur-X e-invoice in C# (.NET)](https://formfeed.dev/guides/csharp/zugferd-e-invoice) - [Convert HTML to PDF in C# (.NET)](https://formfeed.dev/guides/csharp/html-to-pdf) - [Generate Open Graph images in C# (.NET)](https://formfeed.dev/guides/csharp/og-image) - [Generate PDFs from a CSV in C# (.NET)](https://formfeed.dev/guides/csharp/batch-from-csv) - [Merge PDFs and add a password in C# (.NET)](https://formfeed.dev/guides/csharp/merge-and-protect) - [Async PDF rendering with a verified webhook in C# (.NET)](https://formfeed.dev/guides/csharp/async-render-webhook) - [Generate a PDF invoice from JSON in Java](https://formfeed.dev/guides/java/pdf-invoice-from-json) - [Create a ZUGFeRD / Factur-X e-invoice in Java](https://formfeed.dev/guides/java/zugferd-e-invoice) - [Convert HTML to PDF in Java](https://formfeed.dev/guides/java/html-to-pdf) - [Generate Open Graph images in Java](https://formfeed.dev/guides/java/og-image) - [Generate PDFs from a CSV in Java](https://formfeed.dev/guides/java/batch-from-csv) - [Merge PDFs and add a password in Java](https://formfeed.dev/guides/java/merge-and-protect) - [Async PDF rendering with a verified webhook in Java](https://formfeed.dev/guides/java/async-render-webhook) - [Generate a PDF invoice from JSON in Ruby](https://formfeed.dev/guides/ruby/pdf-invoice-from-json) - [Create a ZUGFeRD / Factur-X e-invoice in Ruby](https://formfeed.dev/guides/ruby/zugferd-e-invoice) - [Convert HTML to PDF in Ruby](https://formfeed.dev/guides/ruby/html-to-pdf) - [Generate Open Graph images in Ruby](https://formfeed.dev/guides/ruby/og-image) - [Generate PDFs from a CSV in Ruby](https://formfeed.dev/guides/ruby/batch-from-csv) - [Merge PDFs and add a password in Ruby](https://formfeed.dev/guides/ruby/merge-and-protect) - [Async PDF rendering with a verified webhook in Ruby](https://formfeed.dev/guides/ruby/async-render-webhook) - [Generate a PDF invoice from JSON in curl](https://formfeed.dev/guides/curl/pdf-invoice-from-json) - [Create a ZUGFeRD / Factur-X e-invoice in curl](https://formfeed.dev/guides/curl/zugferd-e-invoice) - [Convert HTML to PDF in curl](https://formfeed.dev/guides/curl/html-to-pdf) - [Generate Open Graph images in curl](https://formfeed.dev/guides/curl/og-image) - [Generate PDFs from a CSV in curl](https://formfeed.dev/guides/curl/batch-from-csv) - [Merge PDFs and add a password in curl](https://formfeed.dev/guides/curl/merge-and-protect) ## Use cases - [Invoice PDF API](https://formfeed.dev/use-cases/invoice-pdf-api): Invoices as PDF from JSON with one API call: amounts and dates formatted per locale, GiroCode, page-numbered footers, and ZUGFeRD e-invoices from the same template. - [Certificate generator API](https://formfeed.dev/use-cases/certificate-generator): Course certificates, certificates of attendance and awards as PDF or PNG from one template: one API call each, or up to 1,000 from a CSV in one batch. - [Open Graph image API](https://formfeed.dev/use-cases/og-image-api): Open Graph images and social cards from a template and JSON: 1200 × 630 pixels, your fonts and logo, titles that shrink to fit, designed on a canvas or written in HTML. - [Report PDF generation](https://formfeed.dev/use-cases/report-pdf): PDF reports from JSON with one API call: charts drawn from your data, tables that run over pages with the head row repeated, page numbers, and a webhook for long reports. - [Contract and agreement PDFs](https://formfeed.dev/use-cases/contract-pdf): Contracts, NDAs and offers as PDF from a template and JSON: clauses that depend on the deal, numbering that follows, versioned wording, appended terms and a password. - [HTML to PDF API](https://formfeed.dev/use-cases/html-to-pdf-api): Convert HTML and CSS to PDF with one API call. Chromium prints it: print CSS, web fonts, headers and footers with page numbers, A4 or any size, PDF or image. - [URL to PDF](https://formfeed.dev/use-cases/url-to-pdf): Print a public web page as PDF or capture it as PNG, JPG or WebP with one API call. Chromium loads the page, runs its JavaScript and applies its print stylesheet. ## Blog - [The preview that lies, and the one that doesn't](https://formfeed.dev/blog/preview-that-matches-the-pdf): A paged preview built on Paged.js fits nine cards on a page where Chromium's PDF fits six. Why, the one rule we changed so the preview breaks where the PDF breaks — and the case no preview can show, because Chromium shrinks the whole PDF. - [Let the agent write the data, not the HTML](https://formfeed.dev/blog/let-the-agent-write-the-data): An AI agent that writes a document's HTML writes a new document every time. One that fills a reviewed template writes the same one. What the template leaves for the model to get wrong, and how to check it for free before anything is printed. - [Page breaks in tables: what Chromium honours in 2026](https://formfeed.dev/blog/page-breaks-in-tables): Twenty-one table layouts rendered to PDF by headless Chromium 153 and measured — which break rules it keeps, and the three mistakes that cut a row in half, hide one under the footer or print the total on every page. - [GiroCode on invoices: the standard and the pitfalls](https://formfeed.dev/blog/girocode-auf-rechnungen): What an EPC QR code (GiroCode) contains, field by field after EPC069-12, which limits apply — and why so many generated codes fail on a check digit, a comma or an umlaut. - [An EU-only document API, and what that actually means](https://formfeed.dev/blog/eu-only-document-api): Data residency claims are easy to make. This is the component list, what leaves the EU, and what the API does when you ask for another region. - [Formfeed enters private beta](https://formfeed.dev/blog/formfeed-private-beta): A template-based PDF and image API with an editor that knows your data, EU-only processing and EUR pricing. Here is what is in the beta and what is not. - [PDF templates belong in your repository](https://formfeed.dev/blog/templates-belong-in-git): Documents are code that produces legal artefacts. Here is how the Formfeed dev kit lets a template be reviewed, tested and released like the rest of your software. ## Free tools These run entirely in the visitor's browser and need no account. - [GiroCode generator](https://formfeed.dev/tools/girocode): An EPC QR code for a SEPA transfer, checked against the standard and downloadable as SVG or PNG. - [JSON to schema and types](https://formfeed.dev/tools/json-to-types): Sample data in, a JSON Schema plus TypeScript and Python types out, the way the editor and the CLI produce them. ## Optional - [The visual editor for images](https://formfeed.dev/features/visual-editor) - [Word and PowerPoint templates and office conversion](https://formfeed.dev/features/office) - [E-invoices: ZUGFeRD and Factur-X from an invoice template, validated against EN 16931; with pdf.ua the same file is also checked as PDF/UA-1](https://formfeed.dev/features/e-invoicing) - [Tagged PDFs in PDF/UA-1, checked by veraPDF: with pdf.ua set in the template or the request, a PDF render from an HTML template is tagged, repaired and held against the machine-checkable rules of PDF/UA-1, and carries the validator's report](https://formfeed.dev/features/accessible-pdf) - [Pricing](https://formfeed.dev/pricing) - [Security](https://formfeed.dev/security) - [Move to Formfeed](https://formfeed.dev/migrate): what an import takes over and what it reports, per product - [Move from apitemplate.io to Formfeed](https://formfeed.dev/migrate/apitemplate-io) - [Move from PDFMonkey to Formfeed](https://formfeed.dev/migrate/pdfmonkey) - [Move from jsreport to Formfeed](https://formfeed.dev/migrate/jsreport)