Kurs-Details
Gibt die Details eines einzelnen Kurses zurück.
Benötigte Lizenz
Dieser Endpoint erfordert die Kurs-Lizenz des Unternehmens.
Request
GET /api/oauth/v2/resource/courses/{uuid}
Header
| Header | Wert |
|---|---|
Authorization | Bearer {access_token} |
URL-Parameter
| Parameter | Typ | Pflicht | Beschreibung |
|---|---|---|---|
uuid | string | Ja | Eindeutige Kurs-ID |
Hinweis: Dieser Endpoint erfordert immer die Scopes
coursesundusers. Für die Teilnehmerliste (attendees) ist zusätzlich der Scopecustomerserforderlich.
Hinweis zu Teilnehmern: Ohne den Scope
customersfehlt der Schlüsselattendeesin der Antwort vollständig – er ist nicht[]und nichtnull. Die ZahlcurrentAttendeesbleibt immer enthalten.
Hinweis: Ein archivierter Kurs liefert
200 OK– archiviert ist die Löschform des Kurses, kein Grund für404.
Response
Erfolg (200 OK)
Beispiel: mit Scope customers
{
"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"]
}
}Beispiel: ohne Scope customers
{
"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"]
}
}Hinweis: Im zweiten Beispiel fehlt der Schlüssel
attendees– er ist nicht vorhanden, nicht[]und nichtnull.currentAttendeesbleibt trotzdem enthalten.
Response-Felder
| Feld | Typ | Beschreibung |
|---|---|---|
data.id | string (UUID) | Eindeutige Kurs-ID |
data.name | string | Kursname |
data.type | string | Kursart (course, course_once, course_service) |
data.archived | boolean | true, wenn der Kurs archiviert ist – die Löschform des Kurses |
data.internalNumber | string | null | Interne Kursnummer |
data.description | string | null | Kursbeschreibung |
data.information | string | null | Zusatzinformationen zum Kurs |
data.maxAttendees | integer | null | Maximale Teilnehmeranzahl |
data.currentAttendees | integer | Anzahl der aktiven (nicht stornierten) Teilnahmen. attendees enthält zusätzlich stornierte Teilnahmen und kann deshalb länger sein als diese Zahl. |
data.color | string | Farbe als Hex-Code. Fällt auf die Kategoriefarbe oder auf #74AFAD zurück, wenn keine eigene Farbe gesetzt ist – nie null. |
data.price | string | Kurspreis brutto |
data.priceNet | string | Kurspreis netto |
data.vat | string | USt-Satz in Prozent für diesen Kurs, sonst die Standard-USt des Unternehmens |
data.sort | integer | Sortierposition |
data.billStatus | string | Abrechnungsstatus: open, invoiced, ignore, unknown |
data.isOnlineBookable | boolean | true, wenn der Kurs online buchbar ist |
data.directBooking | boolean | true, wenn eine Online-Buchung ohne Bestätigung sofort gilt |
data.bookingBefore | string (ISO 8601 Dauer) | Spätester Buchungszeitpunkt vor Kursbeginn, z.B. P1D für einen Tag |
data.storno | string (ISO 8601 Dauer) | Frist für eine kostenlose Stornierung vor Kursbeginn, z.B. PT24H für 24 Stunden |
data.category | string (UUID) | null | Kurskategorie. Nachladen über GET /services/categories/{uuid} |
data.instructors | Array (string, UUID) | UUIDs der Kursleiter. Nachladen über GET /users/{uuid} |
data.location | string (UUID) | null | Kursort |
data.tenancies | Array (string, UUID) | IDs der Mandanten, für die dieser Kurs verwendbar ist – leer ohne das Add-on Mandanten |
data.attendees | Array (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 |
curl -X GET "https://my.offisy.at/api/oauth/v2/resource/courses/b2c3d4e5-f6a7-8901-bcde-f01234567890" \
-H "Authorization: Bearer {access_token}"Mögliche Fehler
| Status | Code | Beschreibung |
|---|---|---|
| 401 | invalid_client | Ungültiger oder fehlender Access Token |
| 403 | insufficient_scope | Scope courses oder users fehlt |
| 403 | insufficient_scope | Kurs-Lizenz nicht vorhanden |
| 404 | not_found | Kurs nicht gefunden |