Quaterio

Invoice PDF generation

Design your invoice template once in the visual editor. Generate PDFs on demand via the GUI or REST API, with variables for every field.

The problem

Building invoice PDFs from scratch means wrangling HTML-to-PDF libraries, fighting page breaks, and maintaining layout code alongside business logic. Puppeteer setups are fragile, and most PDF APIs don't give you a way to design the template visually.

The solution

Quaterio separates design from data. Build your invoice layout in the visual editor with placeholder variables for company name, line items, totals, dates and payment QR codes. Then generate PDFs one at a time or in batches via the API.

What you get

  • Visual template editor — no HTML or CSS required
  • Variable placeholders for all dynamic fields (text, numbers, dates)
  • QR code placeholders for payment links
  • Barcode placeholders (CODE128, EAN13, UPC)
  • Batch generation — up to 1,000 invoices in a single API call
  • Clean download URLs (invoice_en_a7f3b2c1.pdf)
  • Custom fonts, colors and branding
  • Multi-language support (set language per document)
  • Print-ready export with CMYK and trim marks
  • Webhooks for invoice generation events

Generate via API

curl -X POST https://quaterio.com/api/v1/generate/template \ -H "Authorization: Bearer q_your_token" \ -d '{ "templateId": "monthly_invoice", "variables": { "company": "Acme Inc", "invoice_number": "INV-2026-0042", "date": "2026-05-23", "items": "<table>...</table>", "total": "$4,250.00", "payment_qr": "https://pay.example.com/inv-0042" } }' # → { "ok": true, "data": { "downloadUrl": ".../invoice_en_a7f3b2c1.pdf" } }

Available on Business plan and above.

What invoice generation actually involves

Most invoice tools focus on the visual side and leave the harder parts unsolved. Here is how Quaterio handles the things teams hit once they move past sending two or three invoices a month.

VAT, GST and sales tax handling

Tax behavior is jurisdiction specific and Quaterio renders rather than computes. You calculate the tax in your billing system and pass it as a variable, and the template displays it. The default invoice template ships with a single tax line at 25% (Sweden VAT) which you can change or duplicate. For compound tax such as Canadian HST or US state and county combined, add additional rows to the totals block.

Tax inclusive pricing (common in B2C across Europe) and tax exclusive pricing (standard for B2B) are both supported via the display formatting. EU B2B reverse charge invoices typically need a note such as "Reverse charge applies, buyer accounts for VAT". Add it as a footer text block.

Multi currency invoicing

Currency conversion is not something Quaterio does. Pass amounts as pre formatted strings ("$1,000.00", "€850.00") and the template renders them. Number formatting itself (comma vs period as decimal separator) is your billing system's call, since Quaterio displays exactly the string you provide.

For dual currency invoices common in cross border B2B (invoice currency plus customer's local currency for reference), the line items table accepts an extra column. Two values per row, both as variables.

Sequential invoice numbering and legal requirements

Most jurisdictions (Sweden, Germany, Spain, Italy, France) require sequential invoice numbers with no gaps. Italy and Spain enforce this through tax submission systems (SDI and SII). Quaterio does not assign numbers; your billing system increments and passes the number as a variable.

If you void or cancel an invoice, the standard is to issue a credit note rather than reuse the number. Build a separate credit note template, pass the original invoice number as a reference variable, and keep both PDFs.

EU e invoicing and Peppol or EN 16931

EU public sector procurement requires structured invoices in the EN 16931 format, submitted via Peppol. The structured format is XML, not PDF. What Quaterio produces is the human readable visual representation that ships alongside the XML envelope, not the submission itself.

In practice, your billing system generates both: the EN 16931 XML for Peppol submission, and a PDF via Quaterio for the buyer's records and accounts payable team. Some accounting suites bundle both into a single Factur X file (PDF/A 3 with embedded XML); Quaterio does not produce Factur X directly.

US contractor invoicing and 1099 reporting

A contractor invoice to a US client should include the contractor's name, address, EIN or SSN (if W 9 was collected), payment terms, and a clear line item breakdown. All standard fields in the template. Tax withholding lines (rare for US contractors but standard internationally) can be added as needed.

1099 NEC issuance is a separate document the payer (your client) files with the IRS, not something the contractor issues. Quaterio is not used for 1099 filing.

Invoice statuses and state machines

Draft, sent, viewed, paid, overdue, void: the invoice state machine lives in your billing system, not in Quaterio. The PDF is the rendered output at one point in time.

For status overlays on the PDF (a "PAID" stamp, a "DRAFT" watermark), pass a status variable that conditionally renders a status block. The template can show or hide the stamp based on the variable value.

Audit trail and document retention

Generated invoices are returned as URLs to PDFs stored on Quaterio storage. For audit grade record keeping, store both the source variable data and the generated PDF in your own billing database. That pair lets you regenerate or verify the document later, and it does not depend on Quaterio retention windows.

Quaterio also tracks version history on templates and documents on the Business plan. Every save is a snapshot, you can compare any two versions side by side with a block level diff, and one click restore brings any prior version back. That gives you a tracked change log for the template language used at any past point, useful for compliance regimes that require it.

Integration with QuickBooks, Xero and accounting platforms

There is no native QuickBooks or Xero integration. Both have webhook events for invoice.created. Wire that webhook to a small handler that calls Quaterio's template API, gets back a PDF URL, and stores it on the invoice record in the accounting platform.

Quaterio works best for teams that want branded PDFs separate from the accounting platform's defaults. If the accounting platform's built in invoice template is good enough, you do not need Quaterio for that workflow.

Subscription and recurring billing workflows

Subscription billing lives in Stripe Billing, Chargebee or similar. Quaterio renders the invoice at each cycle, not the billing schedule. The typical wiring: Stripe invoice.finalized webhook fires, your handler pulls the invoice data, calls Quaterio with the line items and customer details, gets back a branded PDF URL, attaches it to the customer notification.

For per customer invoice customization (different languages, currencies, branding for white label resellers), the API variables make this straightforward; each cycle generates a different PDF from the same template.

Approval workflows and multi party signing

Multi stage internal approval (analyst drafts, manager signs off, controller finalizes) is a workflow concern, not a document concern. Generate the PDF at each stage if the data changes; if only the approval status changes, a single final PDF at the end is usually cleaner.

For invoices that need countersignature (rare but common in long term contracts and government work), the form field placeholder type renders as a fillable-signature field in the exported PDF. For structured e-signature flows with audit trails, wire up a platform like Documenso or DocuSign via webhooks. A native e-signature integration is on the roadmap.

Just need to send a single invoice?

Start with the free invoice template →

Ready to try it?

Start for free. No credit card required.