The Invovate Invoice API lets you generate professional PDF invoices programmatically — from your backend, a serverless function, or a no-code automation tool. It accepts a JSON payload describing invoice details and returns either a PDF binary or a JSON confirmation.
This guide covers everything you need to go from zero to a generated invoice in under 10 minutes, including authentication, request format, and full code examples in cURL, JavaScript, and Python.
Prerequisites
- A free Invovate account (register here)
- An API key (generated in your dashboard under Settings → API)
- Basic familiarity with REST APIs and HTTP requests
Authentication
All API requests must include your API key as a Bearer token in the Authorization header:
Authorization: Bearer inv_your_api_key_hereAPI keys begin with inv_. Keep your key secret — treat it like a password. If a key is compromised, regenerate it immediately from your dashboard.
API Endpoint
| Method | URL | Description |
|---|---|---|
| POST | https://invovate.com/api/generate-invoice | Generate a PDF or JSON invoice |
| GET | https://invovate.com/api/health | Check API status |
Request Body
The API accepts Content-Type: application/json. Here is the full request schema:
{ "output": "pdf", // "pdf" or "json" "language": "en", // en, nl, de, fr, es, it, pt, ar, ja, ru, hi "template": "classic", // classic, modern, bold, minimal, navy "currency": "USD", // ISO 4217 code "from": "Acme Corp\n123 Main St\nNew York, NY 10001", "to": "Client Name\nClient Address\[email protected]", "invoiceNumber": "INV-2026-001", "invoiceDate": "2026-04-01", "dueDate": "2026-05-01", "items": [ { "description": "Web Development — April retainer", "quantity": 1, "rate": 2500.00, "tax": 0 }, { "description": "Domain renewal", "quantity": 2, "rate": 14.99, "tax": 20 } ], "taxRate": 0, // global tax % (overridden by per-item tax) "discount": 0, // discount amount or % "discountType": "percent", // "percent" or "fixed" "amountPaid": 0, "notes": "Payment via bank transfer to: IBAN GB00 0000 0000 0000", "terms": "Net 30" }Example: cURL
curl -X POST https://invovate.com/api/generate-invoice -H "Authorization: Bearer inv_your_api_key_here" -H "Content-Type: application/json" -d '{"output": "pdf","language": "en","template": "classic","currency": "USD","from": "Acme Corp\n123 Main St\nNew York NY 10001","to": "Jane Smith\nAcme Client Co\[email protected]","invoiceNumber": "INV-001","invoiceDate": "2026-04-01","dueDate": "2026-05-01","items": [{"description":"Consulting","quantity":10,"rate":150,"tax":0}],"notes": "Thank you for your business."}' --output invoice.pdfIf successful, the response body is the raw PDF binary. Use --output invoice.pdf to save it to disk.
Example: JavaScript (Node.js / fetch)
const fs = require('fs'); const payload = { output: 'pdf', language: 'en', template: 'modern', currency: 'EUR', from: 'Your Company GmbH\nMusterstraße 1\n10115 Berlin', to: 'Client Name\[email protected]', invoiceNumber: 'INV-2026-042', invoiceDate: '2026-04-01', dueDate: '2026-05-01', items: [ { description: 'Software development', quantity: 40, rate: 95, tax: 19 } ], notes: 'Bitte überweisen Sie den Betrag innerhalb von 30 Tagen.' }; const response = await fetch('https://invovate.com/api/generate-invoice', { method: 'POST', headers: { 'Authorization': 'Bearer inv_your_api_key_here', 'Content-Type': 'application/json' }, body: JSON.stringify(payload) }); if (!response.ok) { const error = await response.json(); throw new Error(error.error); } const pdfBuffer = Buffer.from(await response.arrayBuffer()); fs.writeFileSync('invoice.pdf', pdfBuffer); console.log('Invoice saved to invoice.pdf');Example: Python
import requests payload = { "output": "pdf", "language": "nl", "template": "minimal", "currency": "EUR", "from": "Uw Bedrijf BV\nKeizersgracht 1\n1015 Amsterdam", "to": "Klant Naam\[email protected]", "invoiceNumber": "FACT-2026-001", "invoiceDate": "2026-04-01", "dueDate": "2026-05-01", "items": [ {"description": "Webdesign", "quantity": 1, "rate": 1200, "tax": 21} ], "notes": "Betaling binnen 30 dagen via bankoverschrijving." } response = requests.post( "https://invovate.com/api/generate-invoice", headers={ "Authorization": "Bearer inv_your_api_key_here", "Content-Type": "application/json" }, json=payload ) response.raise_for_status() with open("factuur.pdf", "wb") as f: f.write(response.content) print("Factuur opgeslagen als factuur.pdf")Template Options
| Template | Style | Best For |
|---|---|---|
| classic | Blue accent, alternating grey rows | General business, B2B |
| modern | Teal/cyan, clean sans-serif | Agencies, freelancers |
| bold | Dark charcoal header, high contrast | Impactful first impressions |
| minimal | Light grey, borderless | Consultants, minimal brands |
| navy | Deep navy header, gold accent | Finance, legal, executive |
Supported Languages
The language parameter affects invoice labels (e.g. "Invoice" vs "Facture" vs "Rechnung"), date formats, number formats, and text direction. Arabic (ar) generates a fully right-to-left PDF. Japanese (ja) uses phonetic fallback characters for the current version.
| Code | Language | Invoice Label |
|---|---|---|
| en | English | INVOICE |
| nl | Dutch | FACTUUR |
| de | German | RECHNUNG |
| fr | French | FACTURE |
| es | Spanish | FACTURA |
| it | Italian | FATTURA |
| pt | Portuguese | FATURA |
| ar | Arabic (RTL) | فاتورة |
| ja | Japanese | 請求書 |
| ru | Russian | СЧЁТ |
| hi | Hindi | चालान |
Error Handling
On error, the API returns a JSON object with an error field and an appropriate HTTP status code:
// 401 Unauthorized { "error": "Invalid or missing API key" } // 429 Too Many Requests { "error": "Rate limit exceeded", "reset": 1743542400 } // 400 Bad Request { "error": "items is required and must be a non-empty array" }Always check response.ok (or status codes) before attempting to read a PDF response. A 4xx/5xx response will contain JSON, not binary PDF data.
Generating JSON Instead of PDF
Set "output": "json" to receive a structured JSON response containing the calculated invoice totals instead of a binary PDF. This is useful for previewing invoices or building custom PDF renderers on your end.
Start Building with the Invoice API
Free tier: 40 calls/hour with no credit card. Register and get your API key in 60 seconds.
Get Your API Key