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_here
API 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.pdf
If 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