API - Rechnungen Admin

📕 Für Administratoren und Entwickler.

Über die Public API können Rechnungsdaten aus spiritflow ausgelesen und als PDF heruntergeladen werden. Das Erstellen, Bearbeiten und Löschen von Rechnungen ist ausschließlich über die spiritflow-Anwendung selbst möglich — die Rechnungs-API ist Read-Only.

Basis-Pfad: /api/v1/invoices

Erforderlicher Scope: invoices:read


Rechnungs-Status-Werte

StatusBedeutung
DRAFTEntwurf (noch keine Rechnungsnummer vergeben)
SENTVersendet
PAIDBezahlt
OVERDUEÜberfällig
CANCELLEDStorniert

Hinweis zu Entwuerfen: Bei Rechnungen im Status DRAFT ist das Feld invoiceNumber immer null. Die Rechnungsnummer wird erst beim Versenden (Übergang DRAFTSENT) vergeben.


Rechnungen auflisten

GET /api/v1/invoices

Scope: invoices:read

Query-Parameter

ParameterTypPflichtBeschreibung
statusStringNeinFiltern nach Status (z.B. PAID)
customerIdLongNeinFiltern nach Kunden-ID
searchStringNeinSuche in Rechnungsnummer und Titel
createdAfterString (ISO 8601)NeinNur Rechnungen, die nach diesem Zeitpunkt erstellt wurden
createdBeforeString (ISO 8601)NeinNur Rechnungen, die vor diesem Zeitpunkt erstellt wurden
invoiceDateAfterString (YYYY-MM-DD)NeinNur Rechnungen mit Rechnungsdatum ab diesem Tag
invoiceDateBeforeString (YYYY-MM-DD)NeinNur Rechnungen mit Rechnungsdatum bis zu diesem Tag
dueDateAfterString (YYYY-MM-DD)NeinNur Rechnungen mit Zahlungsziel ab diesem Tag
dueDateBeforeString (YYYY-MM-DD)NeinNur Rechnungen mit Zahlungsziel bis zu diesem Tag
pageIntegerNeinSeite (Standard: 0)
sizeIntegerNeinEinträge pro Seite, max. 100 (Standard: 20)
sortStringNeinSortierung (Standard: invoiceDate,desc). Erlaubte Felder: createdAt, updatedAt, invoiceDate, dueDate, invoiceNumber, status, title

Antwort (200 OK)

{
  "data": [
    {
      "id": 87,
      "invoiceNumber": "RE-2025-0042",
      "title": "Website-Relaunch ACME - Phase 1",
      "description": "Abrechnung der Konzeptionsphase und ersten Designentwuerfe.",
      "customerName": "ACME GmbH",
      "projectName": "Website-Relaunch ACME",
      "netAmount": 3200.00,
      "taxRate": 19.00,
      "taxAmount": 608.00,
      "grossAmount": 3808.00,
      "currency": "EUR",
      "invoiceDate": "2025-02-01",
      "dueDate": "2025-03-01",
      "paidDate": "2025-02-20",
      "status": "PAID",
      "isOverdue": false,
      "isCancellationInvoice": false,
      "lineItems": [
        {
          "description": "Konzeption und Wireframes",
          "quantity": 16.00,
          "unit": "Std",
          "unitPrice": 120.00,
          "netAmount": 1920.00
        },
        {
          "description": "Design-Entwuerfe (3 Varianten)",
          "quantity": 1.00,
          "unit": "Pauschal",
          "unitPrice": 1280.00,
          "netAmount": 1280.00
        }
      ],
      "createdAt": "2025-01-31T16:00:00Z",
      "updatedAt": "2025-02-20T10:00:00Z"
    }
  ],
  "pagination": {
    "page": 0,
    "size": 20,
    "totalElements": 28,
    "totalPages": 2
  },
  "meta": {
    "requestId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "timestamp": "2025-03-01T10:30:00Z"
  }
}

cURL-Beispiel

curl -X GET "https://app.spiritflow.team/api/v1/invoices?status=PAID&sort=invoiceDate,desc" \
  -H "X-API-Key: sf_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

Einzelne Rechnung abrufen

GET /api/v1/invoices/{id}

Scope: invoices:read

Pfad-Parameter

ParameterTypBeschreibung
idLongID der Rechnung

Antwort (200 OK)

Einzelnes PublicInvoiceDto-Objekt mit gleicher Struktur wie in der Liste.

Hinweis: Bei Rechnungsentwuerfen (Status DRAFT) ist invoiceNumber null. In diesem Fall wird null im Feld zurückgegeben.

Fehler-Codes

HTTP-StatusCodeBeschreibung
404NOT_FOUNDRechnung nicht gefunden oder gehoert nicht zu diesem Mandanten

cURL-Beispiel

curl -X GET "https://app.spiritflow.team/api/v1/invoices/87" \
  -H "X-API-Key: sf_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

Rechnungs-PDF herunterladen

GET /api/v1/invoices/{id}/pdf

Scope: invoices:read

Mit diesem Endpunkt kann das fertig generierte PDF einer Rechnung direkt heruntergeladen werden. Das PDF wird on-demand erzeugt und entspricht der aktuellen Rechnungsversion.

Pfad-Parameter

ParameterTypBeschreibung
idLongID der Rechnung

Antwort (200 OK)

PDF-Datei als Binaerdaten.

Response-Header

HeaderBeispielwert
Content-Typeapplication/pdf
Content-Dispositionattachment; filename="RE-2025-0042.pdf"

Fehler-Codes

HTTP-StatusCodeBeschreibung
404NOT_FOUNDRechnung nicht gefunden
500INTERNAL_ERRORPDF konnte nicht generiert werden

cURL-Beispiel

curl -X GET "https://app.spiritflow.team/api/v1/invoices/87/pdf" \
  -H "X-API-Key: sf_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
  -o "rechnung-RE-2025-0042.pdf"

Antwort-Felder im Überblick

FeldTypBeschreibung
idnumberEindeutige ID der Rechnung
invoiceNumberstring oder nullRechnungsnummer (bei Entwuerfen: null)
titlestringTitel der Rechnung
descriptionstring?Beschreibungstext
customerNamestring?Name des Kunden
projectNamestring?Name des verknuepften Projekts
netAmountnumberNettobetrag in der Rechnungswaehrung
taxRatenumberUmsatzsteuersatz in Prozent
taxAmountnumberUmsatzsteuerbetrag
grossAmountnumberBruttobetrag (inkl. Steuer)
currencystringWährungscode (z.B. EUR)
invoiceDatestringRechnungsdatum (YYYY-MM-DD)
dueDatestring?Zahlungsziel (YYYY-MM-DD)
paidDatestring?Zahlungseingang (YYYY-MM-DD), null wenn nicht bezahlt
statusstringAktueller Status (siehe Tabelle oben)
isOverduebooleanRechnung ist überfällig
isCancellationInvoicebooleanHandelt es sich um eine Stornorechnung
lineItemsArrayRechnungspositionen (siehe unten)
createdAtstringErstellungszeitpunkt (ISO 8601, UTC)
updatedAtstringLetzter Aenderungszeitpunkt (ISO 8601, UTC)

Felder einer Rechnungsposition (lineItems)

FeldTypBeschreibung
descriptionstringBeschreibung der Position
quantitynumberMenge
unitstring?Einheit (z.B. Std, Pauschal)
unitPricenumberEinzelpreis
netAmountnumberPositionsbetrag (Menge × Einzelpreis)