Appointment Details
Returns the details of a single appointment.
Request
GET /api/oauth/v2/resource/appointments/{uuid}
Header
| Header | Value |
|---|---|
Authorization | Bearer {access_token} |
URL parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
uuid | string | Yes | Unique appointment ID |
Response
Success (200 OK)
Example: Single appointment
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"
}
}Example: Course appointment
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"
}
}Response fields
| Field | Type | Description |
|---|---|---|
data.id | string (UUID) | Unique appointment ID |
data.title | string | Title of the appointment |
data.start | string (ISO 8601) | null | Start time |
data.end | string (ISO 8601) | null | End time |
data.allDay | boolean | All-day appointment |
data.status | string | Status of the appointment (active or request) |
data.type | string | Appointment type (admin, customer, course, pause, private, vacation, illness, official_holiday, external) |
data.course | object | null | Course data — only populated when type: "course", otherwise null |
data.course.id | string (UUID) | Course ID |
data.course.name | string | Course name |
data.course.maxAttendees | integer | null | Maximum number of attendees |
data.course.currentAttendees | integer | Current number of attendees |
data.course.color | string | null | Color as hex code (e.g. #ff0000) |
data.course.instructors | Array | List of instructors |
data.course.instructors[].id | string (UUID) | Instructor ID |
data.course.instructors[].firstName | string | First name of the instructor |
data.course.instructors[].lastName | string | Last name of the instructor |
data.course.location | object | null | Course location |
data.course.location.id | string (UUID) | Location ID |
data.course.location.name | string | Location name |
data.course.attendees | Array | List of course attendees |
data.course.attendees[].customer | object | Attendee summary |
data.course.attendees[].customer.id | string (UUID) | Customer ID |
data.course.attendees[].customer.firstName | string | First name |
data.course.attendees[].customer.lastName | string | Last name |
data.course.attendees[].bookingDate | string (ISO 8601) | null | Booking date |
data.note | string | Internal note |
data.customer | object | null | Linked customer |
data.customer.id | string (UUID) | Customer ID |
data.customer.firstName | string | First name |
data.customer.lastName | string | Last name |
data.service | object | null | Linked service |
data.service.id | string (UUID) | Service ID |
data.service.name | string | Name of the service |
data.source | string | Source of the appointment |
data.deleted | boolean | true if the appointment is cancelled, otherwise false |
data.deletedAt | string (ISO 8601) | null | Time of cancellation, null if not cancelled |
data.stornoReason | string | null | Cancellation reason, null if not cancelled or no reason given |
data.createdAt | string (ISO 8601) | null | Creation time |
data.updatedAt | string (ISO 8601) | null | Last modification time |
Note: The
customerandserviceobjects contain only a summary with the most important fields (see table above).
Note: This endpoint always requires both scopes
appointmentsandusers. If the retrieved appointment is a course appointment, the scopecustomersis additionally required — becausecoursecontains personal customer data (attendees.customer) and user data (instructors). If this scope is missing, the API responds with403 insufficient_scope.
Beispiele
bash
curl -X GET "https://my.offisy.at/api/oauth/v2/resource/appointments/b2c3d4e5-f6a7-8901-bcde-f01234567890" \
-H "Authorization: Bearer {access_token}"Parameter
Zuerst Token anfordern
Possible errors
| Status | Code | Description |
|---|---|---|
| 401 | invalid_client | Invalid or missing access token |
| 403 | insufficient_scope | Scope appointments or users missing (both always required) |
| 403 | insufficient_scope | Appointment is a course appointment and scope customers is missing |
| 404 | not_found | Appointment not found |