Skip to content

Rechnungen abrufen ​

Gibt eine paginierte Liste aller Rechnungen des Unternehmens zurück. Die Liste enthält Rechnungsköpfe ohne Positionen – für die vollständigen Positionen verwendest du den Details-Endpoint.

Request ​

GET /api/oauth/v2/resource/invoices

HeaderWert
AuthorizationBearer {access_token}

Query-Parameter ​

ParameterTypPflichtBeschreibung
offsetintegerNeinStartposition (Standard: 0, Min: 0)
limitintegerNeinAnzahl Ergebnisse (Standard: 50, Min: 1, Max: 200)
viewstringNeinAntwortformat: default (Vorgabe) oder slim (schlanker Abruf)
createdSincestring (ISO 8601)NeinNur Rechnungen, die ab diesem Zeitpunkt angelegt wurden (createdAt >=)
createdUntilstring (ISO 8601)NeinNur Rechnungen, die bis zu diesem Zeitpunkt angelegt wurden (createdAt <=)
updatedSincestring (ISO 8601)NeinNur Rechnungen, die ab diesem Zeitpunkt geändert wurden (updatedAt >=). Neu angelegte Rechnungen kommen mit, weil der Änderungszeitpunkt beim Anlegen gesetzt wird.
updatedUntilstring (ISO 8601)NeinNur Rechnungen, die bis zu diesem Zeitpunkt geändert wurden (updatedAt <=)

Hinweis: Für einen Abgleich genügt updatedSince – der Wert deckt neue und geänderte Rechnungen ab.

Hinweis: Formate, Zeitzonen-Verhalten, Sortierung im Filter-Modus, Cursor-Strategie und die meta.total-Falle gelten für alle Zeitstempel-Filter gleich – siehe Inkrementeller Abgleich. Das Restrisiko der Paginierung tritt bei Rechnungen zusätzlich auf, wenn eine Rechnung während des Durchlaufs gelöscht wird.

Hinweis zu Löschungen: Rechnungen führen keinen Löschzeitpunkt. Deshalb gibt es hier kein deletedSince. Eine gelöschte Rechnung verschwindet aus dieser Liste und aus dem Einzelabruf, ohne dass der Abgleich davon erfährt.

Eine Rechnung, die dein Client zwischengespeichert hat, bleibt dort dauerhaft bestehen. Wer Löschungen erkennen muss, braucht zusätzlich einen periodischen Vollabgleich: alle Rechnungen ohne Zeitstempel-Filter holen und mit dem eigenen Bestand vergleichen.

Response ​

Erfolg (200 OK) ​

json
{
  "data": [
    {
      "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "sequence": 42,
      "formattedSequence": "RE-2026-0042",
      "name": "Rechnung an Anna Muster",
      "status": "open",
      "net": 100.00,
      "subTotal": 110.00,
      "gross": 110.00,
      "discount": 0.00,
      "outstandingBalance": 110.00,
      "invoicingDate": "2026-06-01",
      "paidAt": null,
      "timeForPayment": "2026-06-15",
      "isFullyPaid": false,
      "visible": true,
      "comment": null,
      "customer": {
        "id": "f0e1d2c3-b4a5-6789-fedc-ba9876543210",
        "firstName": "Anna",
        "lastName": "Muster"
      },
      "createdAt": "2026-06-01T09:30:00+02:00",
      "updatedAt": "2026-06-05T14:10:00+02:00"
    }
  ],
  "meta": {
    "total": 128,
    "offset": 0,
    "limit": 50
  }
}

Response-Felder ​

FeldTypBeschreibung
dataArrayListe der Rechnungen
data[].idstring (UUID)Eindeutige ID der Rechnung
data[].sequenceinteger | nullLaufende Nummer der Rechnung
data[].formattedSequencestring | nullFormatierte Rechnungsnummer
data[].namestring | nullBezeichnung der Rechnung
data[].statusstring | nullStatus der Rechnung
data[].netnumber | nullNettobetrag
data[].subTotalnumber | nullZwischensumme
data[].grossnumber | nullBruttobetrag
data[].discountnumber | nullRabattbetrag
data[].outstandingBalancenumber | nullOffener Betrag
data[].invoicingDatestring | nullRechnungsdatum (YYYY-MM-DD)
data[].paidAtstring | nullZahlungsdatum (YYYY-MM-DD)
data[].timeForPaymentstring | nullZahlungsfrist (YYYY-MM-DD)
data[].isFullyPaidbooleanVollständig bezahlt
data[].visiblebooleanRechnung sichtbar
data[].commentstring | nullKommentar zur Rechnung
data[].customerobject | nullZugeordnete:r Kunde/Kundin
data[].customer.idstring (UUID)Kunden-ID
data[].customer.firstNamestringVorname
data[].customer.lastNamestringNachname
data[].createdAtstring (ISO 8601) | nullErstellungszeitpunkt
data[].updatedAtstring (ISO 8601) | nullLetzter Änderungszeitpunkt
meta.totalintegerGesamtanzahl der Rechnungen
meta.offsetintegerAktuelle Startposition
meta.limitintegerAnzahl der zurückgegebenen Einträge

Schlanker Abruf (?view=slim) ​

Mit view=slim liefert der Endpoint eine schlanke Payload mit weniger Daten pro Rechnung. Ohne den Parameter bleibt der Abruf unverändert.

Wird view mehrfach angegeben, gilt die letzte Angabe – ?view=default&view=slim liefert also die schlanke Antwort.

Die schlanke Payload enthält:

id, sequence, formattedSequence, status, net, subTotal, gross, discount, outstandingBalance, invoicingDate, paidAt, isFullyPaid, customer (nur id), createdAt, updatedAt

Referenzen wie customer erscheinen im schlanken Abruf nur als Objekt mit id, ohne die übrigen Felder. name, timeForPayment, visible und comment entfallen.

Hinweis: createdAt und updatedAt liefert derzeit nur der schlanke Abruf – der Standardabruf führt diese Felder noch nicht.

Warnung: Verwende updatedAt bei Rechnungen aktuell nicht als Cursor für einen inkrementellen Abgleich. Der Wert wird derzeit nicht bei jeder Änderung zuverlässig gesetzt, eine Änderung kann dadurch unbemerkt am Cursor vorbeilaufen. Für einen vollständigen Abgleich ist bis auf Weiteres ein periodischer Vollabruf nötig.

Beispiel: view=slim

json
{
  "data": [
    {
      "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "sequence": 42,
      "formattedSequence": "RE-2026-0042",
      "status": "open",
      "net": 100.00,
      "subTotal": 110.00,
      "gross": 110.00,
      "discount": 0.00,
      "outstandingBalance": 110.00,
      "invoicingDate": "2026-06-01",
      "paidAt": null,
      "isFullyPaid": false,
      "customer": {
        "id": "f0e1d2c3-b4a5-6789-fedc-ba9876543210"
      },
      "createdAt": "2026-05-20T09:12:00+02:00",
      "updatedAt": "2026-06-01T14:03:00+02:00"
    }
  ],
  "meta": {
    "total": 128,
    "offset": 0,
    "limit": 50
  }
}
Beispiele
bash
curl -X GET "https://my.offisy.at/api/oauth/v2/resource/invoices?offset=0&limit=50&view=default&createdSince=beispiel&createdUntil=beispiel&updatedSince=2026-04-15T10%3A00%3A00&updatedUntil=2026-04-15T10%3A00%3A00" \
  -H "Authorization: Bearer {access_token}"
Parameter
Zuerst Token anfordern

Mögliche Fehler ​

StatusCodeBeschreibung
400validation_errorUngültiger Wert für view (gültige Werte: default, slim)
400validation_errorEin Zeitstempel-Filter enthält einen ungültigen Wert
401invalid_clientUngültiger oder fehlender Access Token
403insufficient_scopeScope invoices nicht vorhanden

Offisy GmbH