Skip to content

List invoices ​

Returns a paginated list of all invoices of the company. The list contains invoice headers without positions — use the details endpoint to retrieve the full positions list.

Request ​

GET /api/oauth/v2/resource/invoices

HeaderValue
AuthorizationBearer {access_token}

Query parameters ​

ParameterTypeRequiredDescription
offsetintegerNoStart position (default: 0, min: 0)
limitintegerNoNumber of results (default: 50, min: 1, max: 200)
viewstringNoResponse format: default (default) or slim (slim response)
createdSincestring (ISO 8601)NoOnly invoices created at or after this timestamp (createdAt >=)
createdUntilstring (ISO 8601)NoOnly invoices created at or before this timestamp (createdAt <=)
updatedSincestring (ISO 8601)NoOnly invoices modified at or after this timestamp (updatedAt >=). Newly created invoices are included, because the modification timestamp is set on creation.
updatedUntilstring (ISO 8601)NoOnly invoices modified at or before this timestamp (updatedAt <=)

Note: For a sync, updatedSince alone is enough — it covers new and modified invoices.

Note: Formats, time zones, sorting, cursor strategy, and the meta.total trap work the same across all filters. See Incremental Sync.

For invoices, the residual risk of pagination also shows up when an invoice is deleted during the run.

Note on deletions: Invoices do not carry a deletion timestamp. There is no deletedSince here. A deleted invoice disappears from this list and from the details endpoint without the sync learning about it.

An invoice your client has cached therefore stays there indefinitely. Detecting deletions needs a periodic full sync instead. Fetch all invoices without a timestamp filter and compare them against your set.

Response ​

Success (200 OK) ​

json
{
  "data": [
    {
      "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "sequence": 42,
      "formattedSequence": "RE-2026-0042",
      "name": "Invoice for 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 fields ​

FieldTypeDescription
dataArrayList of invoices
data[].idstring (UUID)Unique ID of the invoice
data[].sequenceinteger | nullSequential invoice number
data[].formattedSequencestring | nullFormatted invoice number
data[].namestring | nullName of the invoice
data[].statusstring | nullInvoice status
data[].netnumber | nullNet amount
data[].subTotalnumber | nullSubtotal
data[].grossnumber | nullGross amount
data[].discountnumber | nullDiscount amount
data[].outstandingBalancenumber | nullOutstanding balance
data[].invoicingDatestring | nullInvoice date (YYYY-MM-DD)
data[].paidAtstring | nullPayment date (YYYY-MM-DD)
data[].timeForPaymentstring | nullPayment due date (YYYY-MM-DD)
data[].isFullyPaidbooleanFully paid
data[].visiblebooleanInvoice visible
data[].commentstring | nullComment on the invoice
data[].customerobject | nullAssigned customer
data[].customer.idstring (UUID)Customer ID
data[].customer.firstNamestringFirst name
data[].customer.lastNamestringLast name
data[].createdAtstring (ISO 8601) | nullCreation timestamp
data[].updatedAtstring (ISO 8601) | nullLast modification timestamp
meta.totalintegerTotal number of invoices
meta.offsetintegerCurrent start position
meta.limitintegerNumber of returned entries

Slim response (?view=slim) ​

With view=slim, the endpoint returns a slim response with less data per invoice. Without the parameter, the response stays unchanged.

If view is given more than once, the last value wins — ?view=default&view=slim returns the slim response.

The slim response contains:

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

References like customer appear in the slim response as an object with only id, without the other fields. name, timeForPayment, visible, and comment are omitted.

Note: Currently only the slim response returns createdAt and updatedAt — the default response doesn't include these fields yet.

Warning: Don't use updatedAt on invoices as a cursor for incremental sync right now. The value isn't reliably set on every change yet, so a change could slip past the cursor unnoticed. For a complete sync, a periodic full sync is required for now.

Example: 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

Possible errors ​

StatusCodeDescription
400validation_errorInvalid value for view (valid values: default, slim)
400validation_errorA timestamp filter contains an invalid value
401invalid_clientInvalid or missing access token
403insufficient_scopeScope invoices not present

Offisy GmbH