Honorarnoten abrufen
Gibt eine paginierte Liste aller Honorarnoten des Unternehmens zurück.
Breaking Change: createdAt ist jetzt ein Zeitstempel
createdAt liefert jetzt einen vollständigen ISO-8601-Zeitstempel mit Offset (2026-06-01T09:30:00+02:00) statt eines reinen Datums (2026-06-01). Wer den Wert als Datum weiterverarbeitet, muss den Zeitanteil abschneiden.
Request
GET /api/oauth/v2/resource/fee-notes
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 Honorarnoten, die ab diesem Zeitpunkt angelegt wurden (createdAt >=) |
createdUntil | string (ISO 8601) | Nein | Nur Honorarnoten, die bis zu diesem Zeitpunkt angelegt wurden (createdAt <=) |
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. Bei Honorarnoten zählt dort überall der Erstellungszeitpunkt statt des Änderungszeitpunkts.Das Restrisiko der Paginierung tritt hier auf, wenn eine Honorarnote während des Durchlaufs gelöscht wird. Details dazu im Hinweis zu Löschungen unten.
Hinweis zu Änderungen und Löschungen: Honorarnoten führen weder einen Änderungs- noch einen Löschzeitpunkt. Deshalb gibt es hier nur
createdSinceundcreatedUntil. Über den Erstellungszeitpunkt sind ein Storno, eine nachträgliche Rechnungszuordnung und die Löschung der zugehörigen Rechnung nicht erkennbar.Eine gelöschte Honorarnote verschwindet aus dieser Liste und aus dem Einzelabruf, ohne dass der Abgleich davon erfährt.
Wer das braucht, kommt an einem periodischen Vollabgleich nicht vorbei. Hol dazu alle Honorarnoten ohne Zeitstempel-Filter und vergleiche sie mit deinem Bestand. Der inkrementelle Abgleich ersetzt den Vollabgleich hier also nicht.
Response
Erfolg (200 OK)
{
"data": [
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"sequence": 12,
"formattedSequence": "HN-2026-0012",
"stornoReason": null,
"createdAt": "2026-06-01T09:30:00+02:00",
"customer": {
"id": "f0e1d2c3-b4a5-6789-fedc-ba9876543210",
"firstName": "Anna",
"lastName": "Muster"
},
"invoice": {
"id": "b2c3d4e5-f6a7-8901-bcde-f12345678901"
}
}
],
"meta": {
"total": 30,
"offset": 0,
"limit": 50
}
}Response-Felder
| Feld | Typ | Beschreibung |
|---|---|---|
data | Array | Liste der Honorarnoten |
data[].id | string (UUID) | Eindeutige ID der Honorarnote |
data[].sequence | integer | null | Laufende Nummer der Honorarnote |
data[].formattedSequence | string | null | Formatierte Nummer der Honorarnote |
data[].stornoReason | string | null | Stornobegründung |
data[].createdAt | string (ISO 8601) | null | Erstellungszeitpunkt |
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[].invoice | object | null | Verknüpfte Rechnung (nur UUID-Referenz) |
data[].invoice.id | string (UUID) | UUID der verknüpften Rechnung |
meta.total | integer | Gesamtanzahl der Honorarnoten |
meta.offset | integer | Aktuelle Startposition |
meta.limit | integer | Anzahl der zurückgegebenen Einträge |
curl -X GET "https://my.offisy.at/api/oauth/v2/resource/fee-notes?offset=0&limit=50&createdSince=beispiel&createdUntil=beispiel" \
-H "Authorization: Bearer {access_token}"Mögliche Fehler
| Status | Code | Beschreibung |
|---|---|---|
| 400 | validation_error | Ein Zeitstempel-Filter enthält einen ungültigen Wert |
| 401 | invalid_client | Ungültiger oder fehlender Access Token |
| 403 | insufficient_scope | Scope invoices nicht vorhanden |