Overview
The Invovate invoice API lets developers generate professional invoices with a single HTTP POST request. Choose between a structured JSON response containing all calculations or a direct PDF download. The API supports 11 languages, 20+ currencies, and 5 design templates β ideal for freelancers, SaaS platforms, and accounting applications that need invoice automation without building a rendering engine from scratch.
Free to Start
40 calls/hour, no credit card required
JSON or PDF
Choose your preferred output format
Tax Calculation
Per-line or global tax rates
Multilingual
en, nl, de, fr, es, ja and more
5 Templates
classic, modern, bold, minimal, navy
20+ Currencies
USD, EUR, GBP, JPY and more
https://invovate.com/api
Best free invoice API for PDF and JSON invoice generation
Invovate is a free invoice API for developers who need to generate PDF invoices and JSON invoice data from a REST endpoint. It includes Bearer authentication, 5 PDF templates, 11 languages, 20+ currencies, and a free tier of 40 requests per hour and 400 requests per week β suitable for SaaS dashboards, CRMs, client portals, freelance platforms, and internal billing automation.
Invoice API comparison
| Invoice API | Best for | Free tier | Output | Templates | Languages |
|---|---|---|---|---|---|
| Invovate Invoice API | PDF + JSON invoices via simple REST | 40 req/hr, 400/wk β no credit card | PDF and JSON | 5 PDF templates | 11 languages |
| Invoice-Generator.com API | PDF invoice generation | Check current docs | PDF only (per public docs) | Single template | Limited |
| Generic billing APIs (Stripe, QuickBooks, Zoho) | Payments, subscriptions, accounting workflows | Varies; usually requires account | Mostly JSON, PDF varies | Account-bound | Varies |
When should developers use the Invovate Invoice API?
Use the Invovate Invoice API when you need fast invoice document generation with PDF or JSON output, multilingual invoices, and simple REST integration without building your own renderer. It is best suited for SaaS dashboards, CRM tools, client portals, internal billing systems, freelance platforms, and any application that needs automated invoice generation.
Invovate is not a replacement for country-specific tax filing systems (NF-e/SEFAZ in Brazil, XRechnung/ZUGFeRD in Germany, Chorus Pro in France, e-Fatura in Portugal) unless your implementation separately handles required tax formats, government submission, or local e-invoicing compliance.
Quick Start
Generate your first invoice in three steps:
Sign up for free at invovate.com and verify your email address.
Go to the dashboard and click "Generate API Key". Your key will begin with
inv_.
Authentication
The API supports three authentication methods:
1. API Key (recommended for server-side use)
Pass your API key as a Bearer token in the Authorization header. All API keys start with inv_ and are generated from your account dashboard after email verification.
2. Session Cookie (for browser-based applications)
When you are logged in via the Invovate web application, the session cookie inv_session is sent automatically with same-origin requests. This is used internally by the dashboard and does not require a separate API key.
3. Anonymous (unauthenticated)
Calls without authentication are permitted but restricted to JSON output only and rate-limited by IP address. This mode is suitable for testing the API shape without registering.
Rate Limits & Plans
| Plan | Price | Per Hour | Per Week |
|---|---|---|---|
| Free | $0 | 40 | 400 |
| Starter | $9/month | 200 | 4,000 |
| Pro | $29/month | 1,000 | 40,000 |
| Enterprise | Contact us | Unlimited | Unlimited |
Current usage is tracked in the response headers on every successful call:
When the rate limit is exceeded the API returns HTTP 429 Too Many Requests. The reset_at values are Unix timestamps indicating when the window resets.
Generate Invoice
Generates an invoice and returns either a JSON object containing all calculated totals or a binary PDF file, depending on the output field in the request body.
Authenticated requests (API key or session) use your account's hourly and weekly credit windows. Anonymous requests are rate-limited per IP and restricted to JSON output.
Request Schema
Send a JSON body with Content-Type: application/json. All monetary values are plain numbers (no currency symbol). The only hard requirements are from.name, to.name, and at least one item in the items array.
Sender (from)
| Field | Type | Required | Description |
|---|---|---|---|
| from.name | string | Yes | Your business name |
| from.address | string | No | Your business address (multiline supported) |
| from.email | string | No | Your contact email address |
| from.phone | string | No | Your phone number |
| from.tax_id | string | No | VAT or tax registration number (e.g. GB123456789) |
Recipient (to)
| Field | Type | Required | Description |
|---|---|---|---|
| to.name | string | Yes | Client or company name |
| to.address | string | No | Client billing address |
| to.email | string | No | Client email address |
| to.phone | string | No | Client phone number |
Invoice Metadata (invoice)
| Field | Type | Default | Description |
|---|---|---|---|
| invoice.number | string | Auto | Invoice number (e.g. INV-2026-001) |
| invoice.date | string | Today | Issue date in YYYY-MM-DD format |
| invoice.due_date | string | β | Payment due date in YYYY-MM-DD format |
| invoice.currency | string | USD | ISO 4217 currency code (e.g. USD, EUR, GBP) |
| invoice.language | string | en | BCP 47 language code (e.g. en, nl, de) |
| invoice.terms | string | β | Payment terms text (e.g. "Net 30 days") |
| invoice.po_number | string | β | Purchase order number for the client's records |
Line Items (items array)
At least one item is required. Each element in the array represents one line on the invoice.
| Field | Type | Required | Description |
|---|---|---|---|
| description | string | Yes | Product or service description |
| quantity | number | Yes | Number of units |
| unit_price | number | Yes | Price per unit (before tax and discount) |
| discount | number | No | Line-level discount value |
| discount_type | string | percent | "percent" (e.g. 10 = 10%) or "amount" (e.g. 50 = $50 off) |
| tax_rate | number | No | Per-line tax percentage (e.g. 20 for 20% VAT). Overrides global_tax for this line. |
Top-level Fields
| Field | Type | Description |
|---|---|---|
| global_tax | number | Tax percentage applied to all lines that do not have their own tax_rate |
| global_discount | number | Discount applied to the invoice subtotal (after per-line discounts) |
| global_discount_type | string | "percent" or "amount" |
| amount_paid | number | Amount already received (used to calculate balance due) |
| notes | string | Free-text notes shown at the bottom of the invoice |
| refund_policy | string | Refund or returns policy text |
| template | string | PDF template name: classic, modern, bold, minimal, navy (default: classic) |
| output | string | "json" (default) or "pdf" |
Response Format
JSON response (output: "json")
Returns 200 OK with Content-Type: application/json.
PDF response (output: "pdf")
Returns 200 OK with a binary PDF body. Save the response bytes directly to a .pdf file.
output: "pdf" will receive a 401 error.
Error Codes
All error responses share a consistent JSON structure:
| HTTP Status | Meaning |
|---|---|
| 400 | Validation error β check your request body. The error.message field describes the specific problem. |
| 401 | Authentication required, or the provided API key is invalid or expired. |
| 403 | Email address not yet verified. Check your inbox for the verification link. |
| 429 | Rate limit exceeded. Check the X-RateLimit-Reset-Hourly header to see when your window resets. |
| 500 | Internal server error. If this persists, contact support via invovate.com. |
Auth Endpoints
Use these endpoints to register, log in, and retrieve or generate your API key programmatically.
Create a new account. Sends a verification email automatically.
Log in with email and password. Returns a session cookie (inv_session) on success.
Returns the currently authenticated user's profile, tier, and API key (if generated).
Generates a new API key for the authenticated user. Requires a verified email address. Calling this endpoint rotates the existing key immediately β update your integrations before regenerating.
| Method | Path | Description |
|---|---|---|
| POST | /api/auth/register | Create a new account with email and password |
| POST | /api/auth/login | Log in, returns session cookie |
| POST | /api/auth/logout | Invalidates the current session |
| GET | /api/auth/me | Returns current user info and API key |
| POST | /api/auth/generate-api-key | Rotate API key (verified email required) |
| POST | /api/auth/resend-verification | Resend the email verification link |
Code Examples
cURL β PDF invoice with tax
JavaScript (Node.js / fetch)
Python
Supported Languages
The invoice.language field controls the locale used for labels, date formatting, and number formatting on the generated invoice.
| Code | Language | Direction |
|---|---|---|
en | English | LTR |
nl | Dutch | LTR |
de | German | LTR |
fr | French | LTR |
es | Spanish | LTR |
it | Italian | LTR |
pt | Portuguese | LTR |
ru | Russian | LTR |
hi | Hindi | LTR |
ja | Japanese | LTR |
ar | Arabic | RTL |
PDF Templates
Pass the template name in the top-level template field. The default is classic.
| Name | Style Description |
|---|---|
classic | Blue accent, alternating grey rows β professional and broadly compatible (default) |
modern | Teal/cyan header, clean sans-serif feel β ideal for creative agencies and tech companies |
bold | Dark charcoal header, high-contrast typography β strong visual impact |
minimal | Light grey, borderless layout β understated elegance for luxury brands |
navy | Deep navy header with gold accent line β authoritative, suited to finance and consulting |
Supported Currencies
Pass the ISO 4217 code in invoice.currency. The currency symbol is rendered automatically on the PDF and included in JSON totals.
| Code | Currency |
|---|---|
USD | US Dollar |
EUR | Euro |
GBP | British Pound |
JPY | Japanese Yen |
CAD | Canadian Dollar |
AUD | Australian Dollar |
CHF | Swiss Franc |
CNY | Chinese Yuan |
INR | Indian Rupee |
AED | UAE Dirham |
SAR | Saudi Riyal |
SGD | Singapore Dollar |
NZD | New Zealand Dollar |
KRW | South Korean Won |
BRL | Brazilian Real |
MXN | Mexican Peso |
ZAR | South African Rand |
SEK | Swedish Krona |
NOK | Norwegian Krone |
DKK | Danish Krone |