Skip to content

Kurse abrufen ​

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

Benötigte Lizenz

Dieser Endpoint erfordert die Kurs-Lizenz des Unternehmens.

Request ​

GET /api/oauth/v2/resource/courses

HeaderWert
AuthorizationBearer {access_token}

Query-Parameter ​

ParameterTypPflichtBeschreibung
typestringNeinKursart (Standard: alle drei Kursarten). Erlaubte Werte: course, course_once, course_service. Sonderwert all ist ein Alias für den Standard.
statusstringNeinFiltert nach Status, kommagetrennt kombinierbar. Erlaubte Werte: active (nicht archiviert), archived. Standard: all (alle Werte). Siehe Konventionen.
offsetintegerNeinStartposition (Standard: 0)
limitintegerNeinAnzahl Ergebnisse (Standard: 50, Max: 200)

Hinweis: Dieser Endpoint erfordert immer die Scopes courses und users. Für die Teilnehmerliste (attendees) ist zusätzlich der Scope customers erforderlich.

Hinweis zu Teilnehmern: Ohne den Scope customers fehlt der Schlüssel attendees in der Antwort vollständig – er ist nicht [] und nicht null. Die Zahl currentAttendees bleibt immer enthalten.

Hinweis: Ein archivierter Kurs ist die Löschform des Kurses. Es gibt keinen Löschzeitpunkt und damit kein deletedSince – der Filter status=archived ist der Weg, gelöschte Kurse zu erhalten.

Hinweis: Für Kurse gibt es keinen inkrementellen Abgleich. Ein Kurs führt keine Zeitstempel, es gibt also kein createdSince und kein updatedSince.

Hinweis: Ohne status-Filter sortiert dieser Endpoint nach interner ID aufsteigend, siehe Konventionen.

Response ​

Erfolg (200 OK) ​

Beispiel: mit Scope customers

json
{
  "data": [
    {
      "id": "c3d4e5f6-a7b8-9012-cdef-012345678901",
      "name": "Yoga Anfänger",
      "type": "course",
      "archived": false,
      "internalNumber": "K-2026-014",
      "description": "Yoga für Einsteiger",
      "information": "Bitte bequeme Kleidung mitbringen",
      "maxAttendees": 20,
      "currentAttendees": 12,
      "color": "#74AFAD",
      "price": "120.00",
      "priceNet": "100.00",
      "vat": "20.00",
      "sort": 0,
      "billStatus": "open",
      "isOnlineBookable": true,
      "directBooking": false,
      "bookingBefore": "P1D",
      "storno": "PT24H",
      "category": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "instructors": ["d4e5f6a7-b8c9-0123-defa-123456789012"],
      "location": "e5f6a7b8-c9d0-1234-efab-234567890123",
      "tenancies": ["9a8b7c6d-5e4f-3210-9876-543210fedcba"],
      "attendees": ["b2c3d4e5-f6a7-8901-bcde-f12345678901"]
    }
  ],
  "meta": {
    "total": 42,
    "offset": 0,
    "limit": 50
  }
}

Beispiel: ohne Scope customers

json
{
  "data": [
    {
      "id": "c3d4e5f6-a7b8-9012-cdef-012345678901",
      "name": "Yoga Anfänger",
      "type": "course",
      "archived": false,
      "internalNumber": "K-2026-014",
      "description": "Yoga für Einsteiger",
      "information": "Bitte bequeme Kleidung mitbringen",
      "maxAttendees": 20,
      "currentAttendees": 12,
      "color": "#74AFAD",
      "price": "120.00",
      "priceNet": "100.00",
      "vat": "20.00",
      "sort": 0,
      "billStatus": "open",
      "isOnlineBookable": true,
      "directBooking": false,
      "bookingBefore": "P1D",
      "storno": "PT24H",
      "category": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "instructors": ["d4e5f6a7-b8c9-0123-defa-123456789012"],
      "location": "e5f6a7b8-c9d0-1234-efab-234567890123",
      "tenancies": ["9a8b7c6d-5e4f-3210-9876-543210fedcba"]
    }
  ],
  "meta": {
    "total": 42,
    "offset": 0,
    "limit": 50
  }
}

Hinweis: Im zweiten Beispiel fehlt der Schlüssel attendees – er ist nicht vorhanden, nicht [] und nicht null. currentAttendees bleibt trotzdem enthalten.

Response-Felder ​

FeldTypBeschreibung
dataArrayListe der Kurse
data[].idstring (UUID)Eindeutige Kurs-ID
data[].namestringKursname
data[].typestringKursart (course, course_once, course_service)
data[].archivedbooleantrue, wenn der Kurs archiviert ist – die Löschform des Kurses
data[].internalNumberstring | nullInterne Kursnummer
data[].descriptionstring | nullKursbeschreibung
data[].informationstring | nullZusatzinformationen zum Kurs
data[].maxAttendeesinteger | nullMaximale Teilnehmeranzahl
data[].currentAttendeesintegerAnzahl der aktiven (nicht stornierten) Teilnahmen. attendees enthält zusätzlich stornierte Teilnahmen und kann deshalb länger sein als diese Zahl.
data[].colorstringFarbe als Hex-Code. Fällt auf die Kategoriefarbe oder auf #74AFAD zurück, wenn keine eigene Farbe gesetzt ist – nie null.
data[].pricestringKurspreis brutto
data[].priceNetstringKurspreis netto
data[].vatstringUSt-Satz in Prozent für diesen Kurs, sonst die Standard-USt des Unternehmens
data[].sortintegerSortierposition
data[].billStatusstringAbrechnungsstatus: open, invoiced, ignore, unknown
data[].isOnlineBookablebooleantrue, wenn der Kurs online buchbar ist
data[].directBookingbooleantrue, wenn eine Online-Buchung ohne Bestätigung sofort gilt
data[].bookingBeforestring (ISO 8601 Dauer)Spätester Buchungszeitpunkt vor Kursbeginn, z.B. P1D für einen Tag
data[].stornostring (ISO 8601 Dauer)Frist für eine kostenlose Stornierung vor Kursbeginn, z.B. PT24H für 24 Stunden
data[].categorystring (UUID) | nullKurskategorie. Nachladen über GET /services/categories/{uuid}
data[].instructorsArray (string, UUID)UUIDs der Kursleiter. Nachladen über GET /users/{uuid}
data[].locationstring (UUID) | nullKursort
data[].tenanciesArray (string, UUID)IDs der Mandanten, für die dieser Kurs verwendbar ist – leer ohne das Add-on Mandanten
data[].attendeesArray (string, UUID)UUIDs aller Kursteilnahmen, einschließlich stornierter. Nur enthalten, wenn der Scope customers vorhanden ist – ohne diesen Scope fehlt der Schlüssel vollständig, er ist nicht [] und nicht null. Details je Teilnahme über Kursteilnehmer anzeigen oder gesammelt über Kursteilnehmer abrufen
meta.totalintegerObergrenze der Trefferanzahl vor der Berechtigungsfilterung – nicht die Zahl der tatsächlich zugänglichen Kurse. count(data) kann kleiner als limit sein, obwohl total mehr verspricht.
meta.offsetintegerAktuelle Startposition
meta.limitintegerAnzahl der zurückgegebenen Einträge
Beispiele
bash
curl -X GET "https://my.offisy.at/api/oauth/v2/resource/courses?type=all&status=all&offset=0&limit=50" \
  -H "Authorization: Bearer {access_token}"
Parameter
Zuerst Token anfordern

Mögliche Fehler ​

StatusCodeBeschreibung
400validation_errortype oder status enthält einen ungültigen Wert
401invalid_clientUngültiger oder fehlender Access Token
403insufficient_scopeScope courses oder users fehlt
403insufficient_scopeKurs-Lizenz nicht vorhanden

Offisy GmbH