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
Header
| Header | Wert |
|---|---|
Authorization | Bearer {access_token} |
Query-Parameter
| Parameter | Typ | Pflicht | Beschreibung |
|---|---|---|---|
offset | integer | Nein | Startposition (Standard: 0, Min: 0) |
limit | integer | Nein | Anzahl Ergebnisse (Standard: 50, Min: 1, Max: 200) |
createdSince | string (ISO 8601) | Nein | Nur Rechnungen, die ab diesem Zeitpunkt angelegt wurden (createdAt >=) |
createdUntil | string (ISO 8601) | Nein | Nur Rechnungen, die bis zu diesem Zeitpunkt angelegt wurden (createdAt <=) |
updatedSince | string (ISO 8601) | Nein | Nur Rechnungen, die ab diesem Zeitpunkt geändert wurden (updatedAt >=). Neu angelegte Rechnungen kommen mit, weil der Änderungszeitpunkt beim Anlegen gesetzt wird. |
updatedUntil | string (ISO 8601) | Nein | Nur Rechnungen, die bis zu diesem Zeitpunkt geändert wurden (updatedAt <=) |
status | string | Nein | Kommaseparierte Liste (Standard: all). Erlaubte Werte: active, deleted. Ungültiger Wert → 400 validation_error. Details siehe Konventionen. |
view | string | Nein | default (Standard) oder slim. slim liefert pro Rechnung nur die wichtigsten Felder – Details siehe Konventionen. Ungültiger Wert → 400 validation_error. |
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.
Hinweis zu Löschungen: Rechnungen führen keinen eigenen Löschzeitpunkt, aber das Löschen setzt
updatedAt. Eine gelöschte Rechnung bleibt überstatus=deletedsichtbar (Felddata[].deleted=true) und ist damit überupdatedSinceinkrementell erkennbar, statt aus der Liste zu verschwinden.
Response
Erfolg (200 OK)
{
"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"
},
"deleted": false,
"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
| Feld | Typ | Beschreibung |
|---|---|---|
data | Array | Liste der Rechnungen |
data[].id | string (UUID) | Eindeutige ID der Rechnung |
data[].sequence | integer | null | Laufende Nummer der Rechnung |
data[].formattedSequence | string | null | Formatierte Rechnungsnummer |
data[].name | string | null | Bezeichnung der Rechnung |
data[].status | string | null | Status der Rechnung |
data[].net | number | null | Nettobetrag |
data[].subTotal | number | null | Zwischensumme |
data[].gross | number | null | Bruttobetrag |
data[].discount | number | null | Rabattbetrag |
data[].outstandingBalance | number | null | Offener Betrag |
data[].invoicingDate | string | null | Rechnungsdatum (YYYY-MM-DD) |
data[].paidAt | string | null | Zahlungsdatum (YYYY-MM-DD) |
data[].timeForPayment | string | null | Zahlungsfrist (YYYY-MM-DD) |
data[].isFullyPaid | boolean | Vollständig bezahlt |
data[].visible | boolean | Rechnung sichtbar |
data[].comment | string | null | Kommentar zur Rechnung |
data[].customer | object | null | Zugeordnete:r Kunde/Kundin |
data[].customer.id | string (UUID) | Kunden-ID |
data[].customer.firstName | string | Vorname |
data[].customer.lastName | string | Nachname |
data[].deleted | boolean | true wenn die Rechnung gelöscht ist |
data[].createdAt | string (ISO 8601) | null | Erstellungszeitpunkt |
data[].updatedAt | string (ISO 8601) | null | Letzter Änderungszeitpunkt |
meta.total | integer | Gesamtanzahl der Rechnungen |
meta.offset | integer | Aktuelle Startposition |
meta.limit | integer | Anzahl der zurückgegebenen Einträge |
Hinweis zu Mandanten: Arbeitet dein Unternehmen mit dem Add-on Mandanten, liefert die Liste nur Rechnungen aus Mandanten, auf die der Besitzer-Benutzer deines API-Zugangs Zugriff hat und in denen er das Recht Rechnungen: Anzeigen hat.
meta.totalzählt nur diese Datensätze. Details: Konventionen.
curl -X GET "https://my.offisy.at/api/oauth/v2/resource/invoices?offset=0&limit=50&createdSince=beispiel&createdUntil=beispiel&updatedSince=2026-04-15T10%3A00%3A00&updatedUntil=2026-04-15T10%3A00%3A00&status=all&view=default" \
-H "Authorization: Bearer {access_token}"Mögliche Fehler
| Status | Code | Beschreibung |
|---|---|---|
| 400 | validation_error | Ein Zeitstempel-Filter enthält einen ungültigen Wert |
| 400 | validation_error | status enthält einen ungültigen Wert |
| 400 | validation_error | view ist weder default noch slim |
| 401 | invalid_client | Ungültiger oder fehlender Access Token |
| 403 | insufficient_scope | Scope invoices nicht vorhanden |