Skip to content

Course Details ​

Returns the details of a single course.

Required license

This endpoint requires the company's course license.

Request ​

GET /api/oauth/v2/resource/courses/{uuid}

HeaderValue
AuthorizationBearer {access_token}

URL parameters ​

ParameterTypeRequiredDescription
uuidstringYesUnique course ID

Note: This endpoint always requires the scopes courses and users. For the attendee list (attendees), the scope customers is additionally required.

Note on attendees: Without the customers scope, the attendees key is missing from the response entirely — it is not [] and not null. The number currentAttendees is always included.

Note: An archived course returns 200 OK — archived is the deletion form of the course, not a reason for 404.

Response ​

Success (200 OK) ​

Example: with 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"]
  }
}

Example: without 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"]
  }
}

Note: In the second example, the attendees key is missing — it is not present, not [], and not null. currentAttendees is still included.

Response fields ​

FieldTypeDescription
data.idstring (UUID)Unique course ID
data.namestringCourse name
data.typestringCourse type (course, course_once, course_service)
data.archivedbooleantrue if the course is archived — the deletion form of the course
data.internalNumberstring | nullInternal course number
data.descriptionstring | nullCourse description
data.informationstring | nullAdditional information about the course
data.maxAttendeesinteger | nullMaximum number of attendees
data.currentAttendeesintegerNumber of active (non-canceled) attendances. attendees additionally includes canceled attendances and can therefore be longer than this number.
data.colorstringColor as a hex code. Falls back to the category color or to #74AFAD if no color of its own is set — never null.
data.pricestringGross course price
data.priceNetstringNet course price
data.vatstringVAT rate in percent for this course, otherwise the company's default VAT
data.sortintegerSort position
data.billStatusstringBilling status: open, invoiced, ignore, unknown
data.isOnlineBookablebooleantrue if the course can be booked online
data.directBookingbooleantrue if an online booking is confirmed immediately without approval
data.bookingBeforestring (ISO 8601 duration)Latest booking time before the course starts, e.g. P1D for one day
data.stornostring (ISO 8601 duration)Deadline for a free cancellation before the course starts, e.g. PT24H for 24 hours
data.categorystring (UUID) | nullCourse category. Look up via GET /services/categories/{uuid}
data.instructorsArray (string, UUID)UUIDs of the instructors. Look up via GET /users/{uuid}
data.locationstring (UUID) | nullCourse location
data.tenanciesArray (string, UUID)IDs of the tenancies this course is available for — empty without the Tenancies add-on
data.attendeesArray (string, UUID)UUIDs of all attendances, including canceled ones. Only included when the customers scope is present — without this scope the key is missing entirely, it is not [] and not null. Details per attendance via Attendee Details or collected via List Attendees
Beispiele
bash
curl -X GET "https://my.offisy.at/api/oauth/v2/resource/courses/b2c3d4e5-f6a7-8901-bcde-f01234567890" \
  -H "Authorization: Bearer {access_token}"
Parameter
Zuerst Token anfordern

Possible errors ​

StatusCodeDescription
401invalid_clientInvalid or missing access token
403insufficient_scopeScope courses or users is missing
403insufficient_scopeCourse license not present
404not_foundCourse not found

Offisy GmbH