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

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.

Free tier: 40 API calls per hour, 400 per week. Starter plan ($9/mo) provides 200/hour, 4,000/week. Pro plan ($29/mo) provides 1,000/hour, 40,000/week.

API Endpoint

MethodURLDescription
POSThttps://invovate.com/api/generate-invoiceGenerate a PDF or JSON invoice
GEThttps://invovate.com/api/healthCheck 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

TemplateStyleBest For
classicBlue accent, alternating grey rowsGeneral business, B2B
modernTeal/cyan, clean sans-serifAgencies, freelancers
boldDark charcoal header, high contrastImpactful first impressions
minimalLight grey, borderlessConsultants, minimal brands
navyDeep navy header, gold accentFinance, 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.

CodeLanguageInvoice Label
enEnglishINVOICE
nlDutchFACTUUR
deGermanRECHNUNG
frFrenchFACTURE
esSpanishFACTURA
itItalianFATTURA
ptPortugueseFATURA
arArabic (RTL)فاتورة
jaJapanese請求書
ruRussianСЧЁТ
hiHindiचालान

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

Further Reading