Skip to content

Termine abrufen

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

Request

GET /api/oauth/v2/resource/appointments

HeaderWert
AuthorizationBearer {access_token}

Query-Parameter

ParameterTypPflichtBeschreibung
offsetintegerNeinStartposition (Standard: 0)
limitintegerNeinAnzahl Ergebnisse (Standard: 50, Max: 200)
fromstring (ISO 8601)JaZeitraum-Start – als Datum (2026-03-01) oder ISO 8601 (2026-03-01T00:00:00+01:00)
untilstring (ISO 8601)JaZeitraum-Ende – als Datum (2026-03-31) oder ISO 8601 (2026-03-31T23:59:59+01:00)
typestringNeinKommaseparierte Liste von Termintypen (Standard: admin,customer,course). Erlaubte Werte: admin, customer, course, pause, private, vacation, illness, official_holiday, external. Sonderwert all gibt alle Typen zurück.
customerIdstring (UUID)NeinFiltert Termine auf einen bestimmten Kunden. Gibt nur Termine zurück, bei denen der Kunde direkt zugewiesen ist oder in der Attendee-Liste eines Kurs-Termins vorkommt.

Hinweis: Die Parameter from und until sind Pflichtfelder. Die API gibt nur Termine im angegebenen Zeitraum zurück.

Tipp: Bei Angabe ohne Uhrzeit (z.B. 2026-03-01) wird from auf 00:00:00 und until auf 23:59:59 gesetzt – ideal für tagesgenaue Abfragen.

Hinweis: Dieser Endpoint erfordert immer die Scopes appointments und users. Für Kurs-Termine (Typ course oder all) ist zusätzlich der Scope customers erforderlich.

Hinweis: Wird customerId angegeben, ist zusätzlich der Scope customers erforderlich – unabhängig vom gewählten Termintyp.

Hinweis zu Kurs-Terminen: Kurs-Termine (type=course) enthalten personenbezogene Kundendaten (attendees.customer) und Mitarbeiterdaten (instructors). Dafür ist der Scope customers erforderlich. Fragst du explizit ?type=course (oder ?type=all) an, ohne diesen Scope zu besitzen, antwortet die API mit 403 insufficient_scope.

Response

Erfolg (200 OK)

Beispiel: Einzeltermin (type: "customer")

json
{
  "data": [
    {
      "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "title": "Erstgespräch",
      "start": "2026-03-15T10:00:00+01:00",
      "end": "2026-03-15T11:00:00+01:00",
      "allDay": false,
      "status": "active",
      "type": "customer",
      "course": null,
      "note": "Bitte nüchtern erscheinen",
      "customer": {
        "id": "f0e1d2c3-b4a5-6789-fedc-ba9876543210",
        "firstName": "Anna",
        "lastName": "Muster"
      },
      "service": {
        "id": "c3d4e5f6-a7b8-9012-cdef-012345678901",
        "name": "Erstgespräch"
      },
      "source": "oauth",
      "deleted": false,
      "deletedAt": null,
      "stornoReason": null,
      "createdAt": "2026-03-01T09:00:00+01:00",
      "updatedAt": "2026-03-01T09:00:00+01:00"
    }
  ],
  "meta": {
    "total": 500,
    "offset": 0,
    "limit": 50
  }
}

Beispiel: Kurs-Termin (type: "course")

json
{
  "data": [
    {
      "id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
      "title": "Yoga Anfänger",
      "start": "2026-03-20T09:00:00+01:00",
      "end": "2026-03-20T10:00:00+01:00",
      "allDay": false,
      "status": "active",
      "type": "course",
      "course": {
        "id": "c3d4e5f6-a7b8-9012-cdef-012345678901",
        "name": "Yoga Anfänger",
        "maxAttendees": 20,
        "currentAttendees": 12,
        "color": "#ff0000",
        "instructors": [
          { "id": "d4e5f6a7-b8c9-0123-defa-123456789012", "firstName": "Max", "lastName": "Muster" }
        ],
        "location": { "id": "e5f6a7b8-c9d0-1234-efab-234567890123", "name": "Studio 1" },
        "attendees": [
          {
            "customer": { "id": "f0e1d2c3-b4a5-6789-fedc-ba9876543210", "firstName": "Anna", "lastName": "Muster" },
            "bookingDate": "2026-03-01T10:00:00+01:00"
          }
        ]
      },
      "note": null,
      "customer": null,
      "service": null,
      "source": "oauth",
      "createdAt": "2026-03-01T09:00:00+01:00",
      "updatedAt": "2026-03-01T09:00:00+01:00"
    }
  ],
  "meta": {
    "total": 500,
    "offset": 0,
    "limit": 50
  }
}

Response-Felder

FeldTypBeschreibung
dataArrayListe der Termine
data[].idstring (UUID)Eindeutige Termin-ID
data[].titlestringTitel des Termins
data[].startstring (ISO 8601) | nullStartzeit
data[].endstring (ISO 8601) | nullEndzeit
data[].allDaybooleanGanztägiger Termin
data[].statusstringStatus des Termins (active oder request)
data[].typestringTermintyp (admin, customer, course, pause, private, vacation, illness, official_holiday, external)
data[].courseobject | nullKurs-Daten – nur bei type: "course" befüllt, sonst null
data[].course.idstring (UUID)Kurs-ID
data[].course.namestringKursname
data[].course.maxAttendeesinteger | nullMaximale Teilnehmeranzahl
data[].course.currentAttendeesintegerAktuelle Teilnehmeranzahl
data[].course.colorstring | nullFarbe als Hex-Code (z.B. #ff0000)
data[].course.instructorsArrayListe der Kursleiter
data[].course.instructors[].idstring (UUID)Kursleiter-ID
data[].course.instructors[].firstNamestringVorname des Kursleiters
data[].course.instructors[].lastNamestringNachname des Kursleiters
data[].course.locationobject | nullKursort
data[].course.location.idstring (UUID)Ort-ID
data[].course.location.namestringOrtsname
data[].course.attendeesArrayListe der Kursteilnehmer
data[].course.attendees[].customerobjectTeilnehmer-Kurzinfo
data[].course.attendees[].customer.idstring (UUID)Kunden-ID
data[].course.attendees[].customer.firstNamestringVorname
data[].course.attendees[].customer.lastNamestringNachname
data[].course.attendees[].bookingDatestring (ISO 8601) | nullBuchungsdatum
data[].notestringInterne Notiz
data[].customerobject | nullVerknüpfter Kunde
data[].customer.idstring (UUID)Kunden-ID
data[].customer.firstNamestringVorname
data[].customer.lastNamestringNachname
data[].serviceobject | nullVerknüpfte Leistung
data[].service.idstring (UUID)Leistungs-ID
data[].service.namestringName der Leistung
data[].sourcestringQuelle des Termins
data[].deletedbooleantrue wenn der Termin storniert ist, sonst false
data[].deletedAtstring (ISO 8601) | nullZeitpunkt der Stornierung, null wenn nicht storniert
data[].stornoReasonstring | nullStorno-Grund, null wenn nicht storniert oder kein Grund angegeben
data[].createdAtstring (ISO 8601) | nullErstellungszeitpunkt
data[].updatedAtstring (ISO 8601) | nullLetzter Änderungszeitpunkt
meta.totalintegerGesamtanzahl der Termine
meta.offsetintegerAktuelle Startposition
meta.limitintegerAnzahl der zurückgegebenen Einträge

Hinweis: Die Objekte customer und service enthalten nur eine Kurzform mit den wichtigsten Feldern (siehe Tabelle oben).

Beispiele
bash
curl -X GET "https://my.offisy.at/api/oauth/v2/resource/appointments?offset=0&limit=50&from=beispiel&until=beispiel&type=admin%2Ccustomer%2Ccourse&customerId=b2c3d4e5-f6a7-8901-bcde-f01234567890" \
  -H "Authorization: Bearer {access_token}"
Parameter
Zuerst Token anfordern

Mögliche Fehler

StatusCodeBeschreibung
400validation_errorfrom und/oder until fehlt oder ist ungültig
401invalid_clientUngültiger oder fehlender Access Token
403insufficient_scopeScope appointments oder users fehlt (beide immer erforderlich)
403insufficient_scope?type=course/?type=all angefragt, aber Scope customers fehlt

Offisy GmbH