List fee notes
Returns a paginated list of all fee notes of the company.
Breaking change: createdAt is now a timestamp
createdAt now returns a full ISO 8601 timestamp with offset (2026-06-01T09:30:00+02:00) instead of a plain date (2026-06-01). If you process the value as a date, strip the time part.
Request
GET /api/oauth/v2/resource/fee-notes
Header
| Header | Value |
|---|---|
Authorization | Bearer {access_token} |
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
offset | integer | No | Start position (default: 0, min: 0) |
limit | integer | No | Number of results (default: 50, min: 1, max: 200) |
createdSince | string (ISO 8601) | No | Only fee notes created at or after this timestamp (createdAt >=) |
createdUntil | string (ISO 8601) | No | Only fee notes created at or before this timestamp (createdAt <=) |
Note: Formats, time zones, sorting, cursor strategy, and the
meta.totaltrap work the same across all filters. See Incremental Sync.For fee notes, that means the creation timestamp everywhere, not the modification timestamp.
The residual risk of pagination shows up here when a fee note is deleted during the run. See the note on deletions below.
Note on changes and deletions: Fee notes carry neither a modification nor a deletion timestamp. That's why only
createdSinceandcreatedUntilexist here. A cancellation, a later invoice assignment, or the deletion of the linked invoice are not detectable through the creation timestamp.A deleted fee note disappears from this list and from the details endpoint without the sync learning about it.
If you need those cases, a periodic full sync is unavoidable. Fetch all fee notes without a timestamp filter and compare them against your set. The incremental sync does not replace the full sync here.
Response
Success (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 fields
| Field | Type | Description |
|---|---|---|
data | Array | List of fee notes |
data[].id | string (UUID) | Unique ID of the fee note |
data[].sequence | integer | null | Sequential fee note number |
data[].formattedSequence | string | null | Formatted fee note number |
data[].stornoReason | string | null | Reversal reason |
data[].createdAt | string (ISO 8601) | null | Creation timestamp |
data[].customer | object | null | Assigned customer |
data[].customer.id | string (UUID) | Customer ID |
data[].customer.firstName | string | First name |
data[].customer.lastName | string | Last name |
data[].invoice | object | null | Linked invoice (UUID reference only) |
data[].invoice.id | string (UUID) | UUID of the linked invoice |
meta.total | integer | Total number of fee notes |
meta.offset | integer | Current start position |
meta.limit | integer | Number of returned entries |
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}"Possible errors
| Status | Code | Description |
|---|---|---|
| 400 | validation_error | A timestamp filter contains an invalid value |
| 401 | invalid_client | Invalid or missing access token |
| 403 | insufficient_scope | Scope invoices not present |