Invoices API
Create, manage, and send invoices. Supports sales invoices, quotes, credit notes, and incoming invoices.
Invoice Types
| Type | German | Description |
|---|---|---|
rechnung | Ausgangsrechnung | Sales invoice |
angebot | Angebot | Quote / proposal |
gutschrift | Gutschrift | Credit note |
eingangsrechnung | Eingangsrechnung | Purchase invoice |
List Invoices
GET /api/invoices?type=rechnung&status=offen&page=1&limit=25
| Param | Type | Description |
|---|---|---|
type | string | Filter by invoice type |
status | string | entwurf, offen, teilbezahlt, bezahlt, storniert |
customerId | uuid | Filter by customer |
from / to | date | Date range (ISO 8601) |
Create Invoice
POST /api/invoices
{
"type": "rechnung",
"customerId": "customer-uuid",
"items": [
{
"position": 1,
"description": "Web Development - March 2026",
"unit": "hours",
"quantity": 40,
"unitPrice": "95.00",
"taxRate": "20.00"
}
],
"notes": "Payment within 14 days.",
"paymentTermDays": 14
}
Send via Email
POST /api/invoices/:id/send
{
"to": "[email protected]",
"subject": "Invoice RG-2026-0042",
"message": "Please find your invoice attached."
}
Download PDF
GET /api/invoices/:id/pdf
Record Payment
POST /api/invoices/:id/payments
{
"amount": "1900.00",
"date": "2026-03-22",
"method": "bank_transfer"
}
E-Invoice Formats
GET /api/invoices/:id/ebinterface # Austrian standard
GET /api/invoices/:id/zugferd # EU standard
Statuses
| Status | Description |
|---|---|
entwurf | Draft |
offen | Open — sent to customer |
teilbezahlt | Partially paid |
bezahlt | Fully paid |
storniert | Cancelled |
Get Invoice
GET /api/invoices/:id
Returns a single invoice with all items, customer, and payment data.
Update Invoice
PUT /api/invoices/:id
Same body as Create Invoice. Draft invoices can be fully updated. Sent invoices (offen) allow updating notes, footer text, and custom fields only.
Delete Invoice
DELETE /api/invoices/:id
Soft-deletes the invoice. Only invoices with status entwurf (draft) or storniert (cancelled) can be deleted. Returns 204 No Content.
Email Preview
Returns the resolved email subject and body (from your email templates, with all variables substituted) and the customer's email address — use this to pre-fill the send dialog before sending.
GET /api/invoices/:id/email-preview
Response:
{
"to": "[email protected]",
"subject": "Your quote AN-2026-0042",
"body": "Dear Ms. Müller,\n\nPlease find your quote attached..."
}
Offer Detail Description (Markdown → PDF)
Quotes (angebot) support an optional detailed description in Markdown that is rendered as separate page(s) appended after the quote in the PDF.
Set or update the detail description:
PUT /api/invoices/:id
Content-Type: application/json
{
"detailsMarkdown": "## Project Scope\\n\\n- Item one\\n- Item two"
}
Generate with AI:
POST /api/ai/offer-details
{
"customerName": "Acme GmbH",
"items": [
{ "description": "Backend Development", "quantity": 80, "unit": "Std" }
],
"headerText": "Web platform relaunch",
"instruction": "Focus on technical approach and timeline"
}
Response:
{
"ok": true,
"markdown": "## Project Overview\\n\\nThis proposal covers..."
}
Requires Pro or Business plan. The generated Markdown is returned for review — save it via PUT /api/invoices/:id with detailsMarkdown.
Item Ordering
Items are stored and rendered in the order of the position field (ascending). When updating an invoice, reorder items by changing their position values. The API always saves items in the submitted array order and renumbers positions 1..N automatically — so to reorder, simply submit the items array in the desired order.