Rechnungen API
Hallo, ich bin Sophie! 👋 Mit der Rechnungen-API kannst Sie UStG-konforme Rechnungen erstellen, versenden und verwalten. Ich erkläre Ihnen alle Endpunkte und zeige Ihnen, wie Sie schnell loslegen kannst.
Die Rechnungen-API ermöglicht Ihnen die vollständige Verwaltung Ihrer Ausgangsrechnungen. Alle Rechnungen werden automatisch gemäß österreichischem UStG §11 erstellt und enthalten alle Pflichtangaben.
Endpunkte
| Methode | Endpunkt | Beschreibung |
|---|---|---|
GET | /v1/invoices | Alle Rechnungen auflisten |
GET | /v1/invoices/:id | Einzelne Rechnung abrufen |
POST | /v1/invoices | Neue Rechnung erstellen |
PATCH | /v1/invoices/:id | Rechnung aktualisieren |
DELETE | /v1/invoices/:id | Rechnung stornieren |
POST | /v1/invoices/:id/send | Rechnung per E-Mail versenden |
GET | /v1/invoices/:id/pdf | PDF herunterladen |
Rechnung - JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "Invoice",
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Eindeutige Rechnungs-ID",
"example": "inv_abc123"
},
"number": {
"type": "string",
"description": "Fortlaufende Rechnungsnummer",
"example": "RE-2026-0001"
},
"status": {
"type": "string",
"enum": ["draft", "sent", "paid", "overdue", "cancelled"],
"description": "Aktueller Status der Rechnung"
},
"customer_id": {
"type": "string",
"description": "ID des Kunden"
},
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"description": { "type": "string" },
"quantity": { "type": "number" },
"unit_price": { "type": "number" },
"vat_rate": { "type": "number", "enum": [20, 13, 10, 0] }
},
"required": ["description", "quantity", "unit_price", "vat_rate"]
}
},
"subtotal": { "type": "number" },
"vat_amount": { "type": "number" },
"total": { "type": "number" },
"currency": { "type": "string", "default": "EUR" },
"issue_date": { "type": "string", "format": "date" },
"due_date": { "type": "string", "format": "date" },
"notes": { "type": "string" },
"payment_terms": { "type": "string" },
"reverse_charge": { "type": "boolean", "default": false },
"created_at": { "type": "string", "format": "date-time" },
"updated_at": { "type": "string", "format": "date-time" }
}
}Rechnungen auflisten
GET /v1/invoices
Ruft eine paginierte Liste aller Rechnungen ab.
Query-Parameter
| Parameter | Typ | Beschreibung |
|---|---|---|
status | string | Filter: draft, sent, paid, overdue, cancelled |
customer_id | string | Filter nach Kunden-ID |
from_date | string | Startdatum (ISO 8601) |
to_date | string | Enddatum (ISO 8601) |
page | number | Seitennummer (Standard: 1) |
per_page | number | Einträge pro Seite (Standard: 20, Max: 100) |
Beispiel
cURL
curl -X GET "https://buchhaltgenie.at/api/v1/invoices?status=sent&per_page=10" \
-H "Authorization: Bearer sk_live_xxxx" \
-H "Content-Type: application/json"Antwort
{
"data": [
{
"id": "inv_abc123",
"number": "RE-2026-0001",
"status": "sent",
"customer": {
"id": "cus_xyz789",
"name": "Musterfirma GmbH"
},
"items": [
{
"description": "Beratungsleistung",
"quantity": 5,
"unit_price": 150.00,
"vat_rate": 20,
"total": 900.00
}
],
"subtotal": 750.00,
"vat_amount": 150.00,
"total": 900.00,
"currency": "EUR",
"issue_date": "2026-01-09",
"due_date": "2026-01-23",
"created_at": "2026-01-09T10:30:00Z"
}
],
"pagination": {
"page": 1,
"per_page": 10,
"total_pages": 5,
"total_count": 48
}
}Einzelne Rechnung abrufen
GET /v1/invoices/:id
Ruft die vollständigen Details einer einzelnen Rechnung ab.
Beispiel
cURL
curl -X GET "https://buchhaltgenie.at/api/v1/invoices/inv_abc123" \
-H "Authorization: Bearer sk_live_xxxx"Rechnung erstellen
POST /v1/invoices
Erstellt eine neue UStG-konforme Rechnung.
Request Body Schema
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
customer_id | string | Ja | ID des Kunden |
items | array | Ja | Mindestens eine Rechnungsposition |
items[].description | string | Ja | Beschreibung der Leistung |
items[].quantity | number | Ja | Menge |
items[].unit_price | number | Ja | Einzelpreis in EUR |
items[].vat_rate | number | Ja | MwSt-Satz (20, 13, 10, oder 0) |
number | string | Nein | Eigene Rechnungsnummer (sonst automatisch) |
issue_date | string | Nein | Rechnungsdatum (Standard: heute) |
due_days | number | Nein | Zahlungsziel in Tagen (Standard: 14) |
notes | string | Nein | Anmerkungen auf der Rechnung |
payment_terms | string | Nein | Zahlungsbedingungen |
reverse_charge | boolean | Nein | Reverse-Charge-Verfahren (EU-Kunden) |
Beispiel
cURL
curl -X POST "https://buchhaltgenie.at/api/v1/invoices" \
-H "Authorization: Bearer sk_live_xxxx" \
-H "Content-Type: application/json" \
-d '{
"customer_id": "cus_xyz789",
"items": [
{
"description": "Steuerberatung Q1 2026",
"quantity": 1,
"unit_price": 500.00,
"vat_rate": 20
},
{
"description": "Buchhaltung Jänner 2026",
"quantity": 10,
"unit_price": 80.00,
"vat_rate": 20
}
],
"due_days": 14,
"notes": "Vielen Dank für Ihr Vertrauen!",
"payment_terms": "Zahlbar innerhalb von 14 Tagen ohne Abzug."
}'Antwort (201 Created)
{
"data": {
"id": "inv_def456",
"number": "RE-2026-0002",
"status": "draft",
"customer": {
"id": "cus_xyz789",
"name": "Musterfirma GmbH"
},
"items": [
{
"description": "Steuerberatung Q1 2026",
"quantity": 1,
"unit_price": 500.00,
"vat_rate": 20,
"total": 600.00
},
{
"description": "Buchhaltung Jänner 2026",
"quantity": 10,
"unit_price": 80.00,
"vat_rate": 20,
"total": 960.00
}
],
"subtotal": 1300.00,
"vat_amount": 260.00,
"total": 1560.00,
"currency": "EUR",
"issue_date": "2026-01-09",
"due_date": "2026-01-23",
"notes": "Vielen Dank für Ihr Vertrauen!",
"payment_terms": "Zahlbar innerhalb von 14 Tagen ohne Abzug.",
"created_at": "2026-01-09T14:22:00Z"
}
}Rechnung aktualisieren
PATCH /v1/invoices/:id
Aktualisiert eine bestehende Rechnung. Nur Rechnungen im Status draft können bearbeitet werden.
Beispiel
cURL
curl -X PATCH "https://buchhaltgenie.at/api/v1/invoices/inv_def456" \
-H "Authorization: Bearer sk_live_xxxx" \
-H "Content-Type: application/json" \
-d '{
"notes": "Aktualisierte Anmerkung",
"due_days": 21
}'Rechnung versenden
POST /v1/invoices/:id/send
Versendet die Rechnung per E-Mail an den Kunden. Der Status wird automatisch auf sent gesetzt.
Request Body
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
to | array | Nein | E-Mail-Adressen (Standard: Kunden-E-Mail) |
cc | array | Nein | CC-Empfänger |
subject | string | Nein | E-Mail-Betreff |
message | string | Nein | Nachricht im E-Mail-Body |
attach_pdf | boolean | Nein | PDF anhängen (Standard: true) |
Beispiel
cURL
curl -X POST "https://buchhaltgenie.at/api/v1/invoices/inv_def456/send" \
-H "Authorization: Bearer sk_live_xxxx" \
-H "Content-Type: application/json" \
-d '{
"to": ["rechnung@musterfirma.at"],
"cc": ["buchhaltung@musterfirma.at"],
"message": "Guten Tag,\n\nanbei erhältst Sie unsere Rechnung.\n\nMit freundlichen Grüßen"
}'Antwort
{
"data": {
"id": "inv_def456",
"status": "sent",
"sent_at": "2026-01-09T15:00:00Z",
"sent_to": ["rechnung@musterfirma.at"],
"email_id": "eml_abc123"
}
}PDF herunterladen
GET /v1/invoices/:id/pdf
Lädt die Rechnung als PDF herunter.
Beispiel
cURL
curl -X GET "https://buchhaltgenie.at/api/v1/invoices/inv_def456/pdf" \
-H "Authorization: Bearer sk_live_xxxx" \
-o rechnung.pdfRechnung stornieren
DELETE /v1/invoices/:id
Storniert eine Rechnung. Stornierte Rechnungen werden nicht gelöscht, sondern mit Status cancelled markiert (BAO §132 konform).
Beispiel
cURL
curl -X DELETE "https://buchhaltgenie.at/api/v1/invoices/inv_def456" \
-H "Authorization: Bearer sk_live_xxxx" \
-H "Content-Type: application/json" \
-d '{"reason": "Fehlerhafte Rechnungsstellung"}'Antwort
{
"data": {
"id": "inv_def456",
"number": "RE-2026-0002",
"status": "cancelled",
"cancelled_at": "2026-01-09T16:00:00Z",
"cancellation_reason": "Fehlerhafte Rechnungsstellung"
}
}UStG §11 Pflichtangaben
Alle über die API erstellten Rechnungen enthalten automatisch die nach UStG §11 erforderlichen Angaben:
| Pflichtangabe | Beschreibung |
|---|---|
| Fortlaufende Nummer | Automatisch generiert (RE-YYYY-NNNN) |
| Leistungserbringer | Name, Anschrift, UID-Nummer |
| Leistungsempfänger | Name, Anschrift (UID bei B2B >400 EUR) |
| Ausstellungsdatum | Rechnungsdatum |
| Leistungszeitraum | Zeitraum der erbrachten Leistung |
| Leistungsbeschreibung | Menge und handelsübliche Bezeichnung |
| Entgelt | Nettobetrag und Steuerbetrag getrennt |
| Steuersatz | 20%, 13%, 10% oder 0% (mit Befreiungsgrund) |
Sophie’s Tipp: Bei Reverse-Charge (innergemeinschaftliche Leistungen) wird automatisch der Hinweis “Steuerschuldnerschaft des Leistungsempfängers” ergänzt.
Fehler-Codes
| Code | HTTP Status | Beschreibung |
|---|---|---|
INVOICE_NOT_FOUND | 404 | Rechnung wurde nicht gefunden |
INVALID_CUSTOMER | 400 | Ungültige oder nicht existierende Kunden-ID |
INVALID_VAT_RATE | 400 | Ungültiger MwSt-Satz (erlaubt: 20, 13, 10, 0) |
INVOICE_ALREADY_SENT | 400 | Rechnung wurde bereits versendet |
INVOICE_CANCELLED | 400 | Rechnung ist bereits storniert |
INVOICE_NOT_DRAFT | 400 | Nur Entwürfe können bearbeitet werden |
MISSING_ITEMS | 400 | Mindestens eine Rechnungsposition erforderlich |
INVALID_DATE | 400 | Ungültiges Datumsformat |
Nächste Schritte
- Kunden API - Kundenverwaltung
- Transaktionen API - Zahlungseingänge verbuchen
- Webhooks - Benachrichtigungen bei Statusänderungen