Quick facts
Invovate's invoice API generates PDF or JSON invoices from a single REST endpoint. This page lists every common task as a copy-paste curl recipe with the expected response. Each recipe has a stable anchor so it can be cited directly.
- Endpoint
POST https://invovate.com/api/generate-invoice- Auth
Authorization: Bearer inv_yourkey(obtain from dashboard)- Body format
- JSON. Top-level keys:
from,to,items,invoice,template,output. - Output modes
"json"(default, returns calculated totals) or"pdf"(binary PDF body, requires auth)- Languages
- 11 — en, nl, de, fr, es, it, pt, ru, hi, ja, ar
- Currencies
- 20+ — USD, EUR, GBP, JPY, CNY, INR, RUB, BRL, SAR, AED, …
- Templates
- classic (default), modern, bold, minimal, navy
- Free tier
- 40 req/hr, 400/wk. Paid tiers from $9/mo.
Recipes
1. Simple English PDF invoice How do I generate a simple PDF invoice via the Invovate API?
POST a JSON body containing from, to, items, and an invoice object with currency and language. Set output to "pdf". The response body is the PDF binary — save it directly with --output.
curl
curl -X POST https://invovate.com/api/generate-invoice \ -H "Authorization: Bearer inv_yourkey" \ -H "Content-Type: application/json" \ -d '{ "output": "pdf", "template": "classic", "invoice": { "number": "INV-2026-05-16", "date": "2026-05-16", "due_date": "2026-06-15", "currency": "USD", "language": "en", "terms": "Net 30 days" }, "from": { "name": "Invovate Ltd" }, "to": { "name": "Customer Name", "email": "[email protected]" }, "items": [ { "description": "Website design", "quantity": 1, "unit_price": 1500, "tax_rate": 20 }, { "description": "Annual hosting", "quantity": 1, "unit_price": 299, "tax_rate": 20 }, { "description": "Domain registration", "quantity": 2, "unit_price": 15, "tax_rate": 20 } ] }' --output invoice-en.pdf200 OK, Content-Type: application/pdf, ~2 KB binary saved to invoice-en.pdf. Latin-script invoices use built-in Helvetica — no font embedding overhead.2. Japanese invoice in JPY How do I generate a Japanese invoice with JPY currency?
Set invoice.language to "ja" and invoice.currency to "JPY". The API automatically embeds Noto Sans JP, so kanji (株式会社), hiragana (の), and katakana (ウェブサイト) render correctly. JPY amounts are formatted without decimals.
curl
curl -X POST https://invovate.com/api/generate-invoice \ -H "Authorization: Bearer inv_yourkey" \ -H "Content-Type: application/json" \ -d '{ "output": "pdf", "template": "classic", "invoice": { "number": "INV-2026-05-16", "date": "2026-05-16", "due_date": "2026-06-15", "currency": "JPY", "language": "ja", "terms": "30日以内払い" }, "from": { "name": "インボヴェイト株式会社" }, "to": { "name": "お客様名", "address": "東京都千代田区1-2-3", "email": "[email protected]" }, "items": [ { "description": "ウェブサイト制作", "quantity": 1, "unit_price": 150000, "tax_rate": 10 }, { "description": "年間ホスティング", "quantity": 1, "unit_price": 29900, "tax_rate": 10 }, { "description": "ドメイン登録", "quantity": 2, "unit_price": 1500, "tax_rate": 10 } ] }' --output invoice-ja.pdf200 OK, application/pdf, ~600 KB (includes the JP font subset). Labels (請求書, 請求書番号, 数量, 金額, 合計) are localized automatically.Note: Item descriptions and party names can mix kanji/kana/Latin — the renderer picks the correct font per glyph.
3. Arabic RTL invoice How do I generate an Arabic right-to-left invoice?
Set invoice.language to "ar". The classic template auto-mirrors: title top-right, invoice-number heading top-left, items table right-to-left (Amount column on the left, Description on the right), totals anchored on the right. Arabic glyphs are pre-shaped into Presentation-Forms-B, so copy-paste returns valid Unicode (no glyph-ID artifacts).
curl
curl -X POST https://invovate.com/api/generate-invoice \ -H "Authorization: Bearer inv_yourkey" \ -H "Content-Type: application/json" \ -d '{ "output": "pdf", "template": "classic", "invoice": { "number": "INV-2026-05-16", "date": "2026-05-16", "due_date": "2026-06-15", "po_number": "PO-2026-001", "terms": "صافي 30 يوم", "currency": "SAR", "language": "ar" }, "from": { "name": "إنفويت ش.م.ح" }, "to": { "name": "اسم العميل", "address": "123 شارع الأعمال", "email": "[email protected]" }, "items": [ { "description": "تصميم مواقع", "quantity": 1, "unit_price": 1500, "tax_rate": 15 }, { "description": "استضافة سنوية", "quantity": 1, "unit_price": 299, "tax_rate": 15 }, { "description": "تسجيل نطاق", "quantity": 2, "unit_price": 15, "tax_rate": 15 } ], "notes": "شكراً لتعاملكم معنا!", "refund_policy": "سياسة الإرجاع لمدة 30 يوماً" }' --output invoice-ar.pdf200 OK, application/pdf, ~65 KB. All labels (فاتورة, التاريخ, الوصف, الكمية, المبلغ, المجموع الفرعي, الإجمالي) are localized. Digits embedded in Arabic text remain LTR ("12345", not "54321").Note: Image inputs (logo, signature) are not supported by the API today — those are UI-only via html2canvas. All other text fields work identically to LTR templates.
4. Validate totals without generating a PDF How do I get the calculated totals without generating a PDF?
Omit output or set it to "json" (the default). The API returns a JSON envelope with calculated subtotal, total_tax, grand_total, balance_due, and per-line totals. Useful for previewing math before generating the PDF, or for embedding the totals in another system.
curl
curl -X POST https://invovate.com/api/generate-invoice \ -H "Authorization: Bearer inv_yourkey" \ -H "Content-Type: application/json" \ -d '{ "output": "json", "invoice": { "currency": "USD", "language": "en" }, "from": { "name": "Invovate Ltd" }, "to": { "name": "Customer Name" }, "items": [ { "description": "Consulting", "quantity": 8, "unit_price": 200, "tax_rate": 20 } ] }'{ "success": true, "invoice": { "subtotal": 1600.00, "total_tax": 320.00, "grand_total": 1920.00, "balance_due": 1920.00, "items": [ { "description": "Consulting", "line_total": 1920.00, "line_tax": 320.00 } ] }, "meta": { "credits_remaining": { "hourly": 39, "weekly": 399 } } }5. Per-line tax rates How do I apply per-line tax rates?
Add tax_rate (as a percent, not a fraction) to each item. tax_rate: 20 = 20%. Different items can have different tax rates — common for invoices that mix services (no tax) with physical goods (taxed), or different VAT classes.
curl
curl -X POST https://invovate.com/api/generate-invoice \ -H "Authorization: Bearer inv_yourkey" \ -H "Content-Type: application/json" \ -d '{ "output": "json", "invoice": { "currency": "EUR", "language": "en" }, "from": { "name": "Acme NV" }, "to": { "name": "Customer BV" }, "items": [ { "description": "Consulting (services, 21% BTW)", "quantity": 10, "unit_price": 80, "tax_rate": 21 }, { "description": "Printed booklet (goods, 9% BTW)", "quantity": 50, "unit_price": 4, "tax_rate": 9 } ] }'subtotal: 1000.00, total_tax: 186.00 (21% × 800 + 9% × 200), grand_total: 1186.00.6. Global discount on the whole invoice How do I apply a discount to the whole invoice?
Add global_discount (a number) and global_discount_type ("percent" or "amount") at the top level. The discount is applied after subtotal but before tax. To discount a single line instead, use discount and discount_type on that item.
curl
curl -X POST https://invovate.com/api/generate-invoice \ -H "Authorization: Bearer inv_yourkey" \ -H "Content-Type: application/json" \ -d '{ "output": "json", "invoice": { "currency": "USD", "language": "en" }, "from": { "name": "Acme" }, "to": { "name": "Customer" }, "items": [ { "description": "Service", "quantity": 1, "unit_price": 1000, "tax_rate": 0 } ], "global_discount": 10, "global_discount_type": "percent" }'subtotal: 1000, global_discount: 100 (10%), grand_total: 900.7. Mark an invoice as partially paid How do I mark an invoice as partially paid?
Add amount_paid at the top level. The PDF shows the paid amount as a negative row and the remaining balance as the bottom-line total. JSON output exposes balance_due. To mark fully paid, set amount_paid equal to grand_total.
curl
curl -X POST https://invovate.com/api/generate-invoice \ -H "Authorization: Bearer inv_yourkey" \ -H "Content-Type: application/json" \ -d '{ "output": "pdf", "template": "classic", "invoice": { "currency": "USD", "language": "en" }, "from": { "name": "Acme" }, "to": { "name": "Customer" }, "items": [ { "description": "Project deposit", "quantity": 1, "unit_price": 5000, "tax_rate": 10 } ], "amount_paid": 2000 }' --output invoice-partial.pdf$5,500.00, amount paid - $2,000.00, balance due $3,500.00.8. Add notes and a refund policy How do I add notes and a refund policy?
Add notes and refund_policy at the top level. Both are free-form strings, rendered below the totals on every template. They support every language the API supports — including RTL Arabic and CJK Japanese — so you can write them in the same language as the invoice.
curl
curl -X POST https://invovate.com/api/generate-invoice \ -H "Authorization: Bearer inv_yourkey" \ -H "Content-Type: application/json" \ -d '{ "output": "pdf", "template": "classic", "invoice": { "currency": "USD", "language": "en" }, "from": { "name": "Acme" }, "to": { "name": "Customer" }, "items": [{ "description": "Service", "quantity": 1, "unit_price": 500 }], "notes": "Thank you for your business! Payment by wire transfer preferred.", "refund_policy": "Refunds within 30 days of invoice date, minus a 10% processing fee." }' --output invoice-with-notes.pdf9. Switch PDF template What PDF templates are available and how do I switch?
Pass template at the top level. Five templates: classic (default — blue accent, balanced), modern (teal, dark band header), bold (orange + dark header), minimal (monochrome, understated), navy (navy + gold, corporate). All templates support all 11 languages.
curl
curl -X POST https://invovate.com/api/generate-invoice \ -H "Authorization: Bearer inv_yourkey" \ -H "Content-Type: application/json" \ -d '{ "output": "pdf", "template": "navy", "invoice": { "currency": "USD", "language": "en" }, "from": { "name": "Acme Corp" }, "to": { "name": "Client Inc" }, "items": [{ "description": "Service", "quantity": 1, "unit_price": 1500 }] }' --output invoice-navy.pdf10. Set invoice number, date, due date, PO and terms How do I set the invoice number, date, due date, PO number, and terms?
All of these live inside the invoice sub-object (not at the top level). Dates use ISO format (YYYY-MM-DD). If you omit any, the API picks safe defaults: number = "INV-" + Date.now(), date = today, due_date / po_number / terms = null (not rendered).
curl
curl -X POST https://invovate.com/api/generate-invoice \ -H "Authorization: Bearer inv_yourkey" \ -H "Content-Type: application/json" \ -d '{ "output": "pdf", "invoice": { "number": "INV-2026-001", "date": "2026-05-19", "due_date": "2026-06-18", "po_number": "PO-2026-7821", "terms": "Net 30", "currency": "USD", "language": "en" }, "from": { "name": "Acme" }, "to": { "name": "Customer" }, "items": [{ "description": "Service", "quantity": 1, "unit_price": 1000 }] }' --output invoice-meta.pdfInvoice #: INV-2026-001 · Date: 2026-05-19 · Due Date: 2026-06-18 · PO #: PO-2026-7821 · Terms: Net 30.Need the full API reference?
Schema tables, error codes, rate limits, authentication, and longer JavaScript / Python examples.