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 <=) |
status | string | No | Comma-separated list (default: all). Allowed values: active, deleted. Invalid value → 400 validation_error. See Conventions for details. |
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 fee note is deleted together with its invoice. It stays visible via
status=deleted(fielddata[].deleted=true), without thecreatedSincesync learning about it.If you need deletions, a periodic full sync with
status=deletedis unavoidable. The incremental sync overcreatedSincedoes not replace that here.
Response
Success (200 OK)
{
"data": [
{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"sequence": 12,
"formattedSequence": "HN-2026-0012",
"stornoReason": null,
"deleted": false,
"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[].deleted | boolean | true if the fee note is deleted (together with its invoice) |
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 |
Note on tenancies: If your company uses the Tenancies add-on, the list returns only fee notes from tenancies the owning user of your API access has access to and where they hold the Rechnungen: Anzeigen permission.
meta.totalcounts only those records. Details: Conventions.
curl -X GET "https://my.offisy.at/api/oauth/v2/resource/fee-notes?offset=0&limit=50&createdSince=beispiel&createdUntil=beispiel&status=all" \
-H "Authorization: Bearer {access_token}"Possible errors
| Status | Code | Description |
|---|---|---|
| 400 | validation_error | A timestamp filter contains an invalid value |
| 400 | validation_error | status contains an invalid value |
| 401 | invalid_client | Invalid or missing access token |
| 403 | insufficient_scope | Scope invoices not present |