Skip to content

Kunden abrufen ​

Gibt eine paginierte Liste aller Kunden des Unternehmens zurück.

Breaking Change

Ohne den neuen Parameter status liefert diese Liste jetzt auch gelöschte Kunden (archivierte Kunden waren schon bisher enthalten). Nur aktive Kunden bekommst du mit status=active.

Ohne Zeitstempel-Filter sortiert die Liste jetzt nach interner ID aufsteigend statt nach Nachname und Vorname.

Request ​

GET /api/oauth/v2/resource/customers

HeaderWert
AuthorizationBearer {access_token}

Query-Parameter ​

ParameterTypPflichtBeschreibung
offsetintegerNeinStartposition (Standard: 0)
limitintegerNeinAnzahl Ergebnisse (Standard: 50, Max: 200)
termstringNeinSuchbegriff für Name (min. 3 Zeichen)
customerNumberstringNeinKundennummer (exakte Übereinstimmung)
socialNumberstringNeinSozialversicherungsnummer (exakte Übereinstimmung)
emailstringNeinE-Mail-Adresse (exakte Übereinstimmung)
phonestringNeinTelefonnummer. Matcht die nationale Nummer (123412345678), E.164 mit Plus (+43123412345678) und 00-Präfix (0043123412345678).
groupIdstring (UUID)NeinFiltert Kunden auf Mitglieder einer bestimmten Kundengruppe. Der Wert entspricht der id, die GET /customers/groups liefert.
statusstringNeinKommaseparierte Liste (Standard: all). Erlaubte Werte: active, archived, deleted. active liefert Kunden, die weder archiviert noch gelöscht sind. Ungültiger Wert → 400 validation_error. Details siehe Konventionen.
createdSincestring (ISO 8601)NeinNur Kunden, die ab diesem Zeitpunkt angelegt wurden (createdAt >=)
createdUntilstring (ISO 8601)NeinNur Kunden, die bis zu diesem Zeitpunkt angelegt wurden (createdAt <=)
updatedSincestring (ISO 8601)NeinNur Kunden, die ab diesem Zeitpunkt geändert wurden (updatedAt >=). Neu angelegte Kunden kommen mit, weil der Änderungszeitpunkt beim Anlegen gesetzt wird.
updatedUntilstring (ISO 8601)NeinNur Kunden, die bis zu diesem Zeitpunkt geändert wurden (updatedAt <=)
deletedSincestring (ISO 8601)NeinNur gelöschte Kunden mit Löschzeitpunkt ab diesem Wert (deletedAt >=). Aktive Kunden liefert dieser Filter nicht.
viewstringNeindefault (Standard) oder slim. slim liefert pro Kunde nur die wichtigsten Felder – Details siehe Konventionen. Ungültiger Wert → 400 validation_error.

Hinweis: Alle Suchfilter können kombiniert werden (UND-Verknüpfung). So kann z.B. gleichzeitig nach socialNumber und term gefiltert werden. Eine Ausnahme gibt es: deletedSince schließt die übrigen Zeitstempel-Filter aus – siehe unten.

Hinweis: customerNumber ist aktuell nicht garantiert eindeutig. Der Filter kann theoretisch mehrere Kunden liefern.

Hinweis: groupId filtert die Kundenliste auf Mitglieder der angegebenen Kundengruppe, z.B. GET /api/oauth/v2/resource/customers?groupId=b2c3d4e5-f6a7-8901-bcde-f12345678901. Die Response-Struktur bleibt unverändert, meta.total spiegelt dabei die gefilterte Menge wider. Ist die Kundengruppe unbekannt oder das UUID-Format ungültig, antwortet die API in beiden Fällen mit 404 not_found statt mit einer leeren Liste. Ein leerer Wert (?groupId=) wirkt dagegen wie kein Filter – die API antwortet mit der ungefilterten Liste.

Bekannte Einschränkung: data[].groups liefert auf dieser Listenroute aktuell immer ein leeres Array, auch wenn dem Kunden Kundengruppen zugeordnet sind. Die Detailroute GET /customers/{uuid} liefert die zugeordneten Kundengruppen korrekt.

Hinweis: Für einen Abgleich genügt updatedSince – der Wert deckt neue und geänderte Kunden ab. Gelöschte Kunden holst du in einem zweiten Request mit deletedSince.

Hinweis: deletedSince lässt sich nicht mit createdSince, createdUntil, updatedSince oder updatedUntil kombinieren. Die API antwortet dann mit 400 validation_error, weil deletedSince die Ergebnismenge auf gelöschte Kunden umschaltet. Frage Änderungen und Löschungen deshalb in zwei getrennten Requests 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 Kunden ohne Änderungszeitpunkt: Bei manchen Kunden ist updatedAt leer. Das betrifft Altbestand aus der Zeit vor der automatischen Zeitstempelung sowie Massenimporte. updatedSince liefert solche Kunden nicht – auch nicht mit einem sehr frühen Datum.

Hol dir für den Erstabgleich deshalb einmal den Vollbestand ohne Zeitstempel-Filter. Danach arbeitest du inkrementell mit updatedSince weiter.

Response ​

Erfolg (200 OK) ​

json
{
  "data": [
    {
      "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "title": null,
      "firstName": "Anna",
      "lastName": "Muster",
      "email": "anna.muster@example.com",
      "phone": "00436641234567",
      "tel": "6641234567",
      "telCode": "0043",
      "phoneSecondary": null,
      "telSecondary": null,
      "telCodeSecondary": null,
      "birthday": "1985-04-12",
      "socialNumber": "1234 120485",
      "customerNumber": "K-00123",
      "tenancies": [
        {
          "id": "f0e1d2c3-b4a5-6789-fedc-ba9876543210",
          "name": "Ordination Muster",
          "abbreviation": "OM",
          "color": "#00adba"
        }
      ],
      "groups": [],
      "archived": false,
      "deleted": false,
      "createdAt": "2026-05-02T08:15:00+02:00",
      "updatedAt": "2026-06-14T11:42:00+02:00",
      "deletedAt": null
    }
  ],
  "meta": {
    "total": 1200,
    "offset": 0,
    "limit": 50
  }
}

Response-Felder ​

FeldTypBeschreibung
dataArrayListe der Kunden
data[].idstring (UUID)Eindeutige Kunden-ID
data[].titlestring | nullTitel (z.B. Dr., Mag.)
data[].firstNamestring | nullVorname
data[].lastNamestring | nullNachname
data[].emailstring | nullE-Mail-Adresse
data[].phonestring | nullVollständige Primärnummer: Ländervorwahl + nationale Nummer, verkettet im 00-Format (z.B. 00436641234567)
data[].telstring | nullNationale Primärnummer ohne Vorwahl (z.B. 6641234567)
data[].telCodestring | nullLändervorwahl der Primärnummer im 00-Format (z.B. 0043)
data[].phoneSecondarystring | nullVollständige Zweitnummer: Vorwahl + Nummer, verkettet im 00-Format
data[].telSecondarystring | nullNationale Zweitnummer ohne Vorwahl
data[].telCodeSecondarystring | nullLändervorwahl der Zweitnummer im 00-Format
data[].birthdaystring | nullGeburtsdatum (YYYY-MM-DD)
data[].socialNumberstring | nullSozialversicherungsnummer
data[].customerNumberstring | nullKundennummer
data[].tenanciesArrayZugeordnete Mandanten
data[].tenancies[].idstring (UUID)Mandanten-ID
data[].tenancies[].namestringName des Mandanten
data[].tenancies[].abbreviationstringKürzel
data[].tenancies[].colorstringFarbe als Hex-Code
data[].groupsArrayZugeordnete Kundengruppen, siehe Kundengruppen-Referenz
data[].groups[].idstring (UUID)Eindeutige ID der Kundengruppe
data[].groups[].namestringName der Kundengruppe
data[].archivedbooleantrue wenn der Kunde archiviert ist
data[].deletedbooleantrue wenn der Kunde gelöscht ist
data[].createdAtstring (ISO 8601) | nullErstellungszeitpunkt
data[].updatedAtstring (ISO 8601) | nullLetzter Änderungszeitpunkt
data[].deletedAtstring (ISO 8601) | nullLöschzeitpunkt, null wenn nicht gelöscht
meta.totalintegerGesamtanzahl der Kunden
meta.offsetintegerAktuelle Startposition
meta.limitintegerAnzahl der zurückgegebenen Einträge
Beispiele
bash
curl -X GET "https://my.offisy.at/api/oauth/v2/resource/customers?offset=0&limit=50&term=Muster&customerNumber=beispiel&socialNumber=1234010190&email=anna.muster%40example.com&phone=%2B43+664+1234567&groupId=b2c3d4e5-f6a7-8901-bcde-f01234567890&status=all&createdSince=beispiel&createdUntil=beispiel&updatedSince=2026-04-15T10%3A00%3A00&updatedUntil=2026-04-15T10%3A00%3A00&deletedSince=beispiel&view=default" \
  -H "Authorization: Bearer {access_token}"
Parameter
Zuerst Token anfordern

Mögliche Fehler ​

StatusCodeBeschreibung
400validation_errorEin Zeitstempel-Filter enthält einen ungültigen Wert
400validation_errordeletedSince wurde mit createdSince, createdUntil, updatedSince oder updatedUntil kombiniert
400validation_errorstatus enthält einen ungültigen Wert
400validation_errorview ist weder default noch slim
401invalid_clientUngültiger oder fehlender Access Token
403insufficient_scopeScope customers nicht vorhanden
404not_foundKundengruppe zu groupId nicht gefunden (auch bei ungültigem UUID-Format)

Offisy GmbH