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
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 |