Cancel Appointment
Cancels an existing appointment. The appointment remains in the database and is marked with deleted: true.
Request
POST /api/oauth/v2/resource/appointments/{uuid}/cancel
Header
| Header | Value |
|---|---|
Authorization | Bearer {access_token} |
Content-Type | application/json |
Required scope: appointments. For course appointments additionally customers.
URL parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
uuid | string (UUID) | Yes | UUID of the appointment to cancel |
Request body
json
{
"reason": "Kunde hat abgesagt",
"notify": false
}Request fields
| Field | Type | Required | Description |
|---|---|---|---|
reason | string | No | Cancellation reason |
notify | boolean | No | Control notification. Default: false for past appointments, otherwise according to company settings. |
Response
Success (200 OK)
json
{
"data": {
"id": "d4e5f6a7-b8c9-0123-defa-123456789012",
"title": "Erstordination – Anna Muster",
"start": "2026-04-02T09:00:00+02:00",
"end": "2026-04-02T10:00:00+02:00",
"allDay": false,
"status": "active",
"type": "customer",
"note": "Bitte nüchtern erscheinen",
"customer": {
"id": "e5f6a7b8-c9d0-1234-efab-234567890123",
"firstName": "Anna",
"lastName": "Muster"
},
"service": {
"id": "c3d4e5f6-a7b8-9012-cdef-012345678901",
"name": "Erstordination"
},
"course": null,
"source": "oauth",
"deleted": true,
"deletedAt": "2026-04-01T15:00:00+02:00",
"stornoReason": "Kunde hat abgesagt",
"createdAt": "2026-04-01T14:23:00+02:00",
"updatedAt": "2026-04-01T15:00:00+02:00"
}
}Response fields
| Field | Type | Description |
|---|---|---|
data.id | string (UUID) | Unique appointment ID |
data.title | string | Appointment title |
data.start | string (ISO 8601) | Start time |
data.end | string (ISO 8601) | End time |
data.allDay | boolean | All-day appointment |
data.status | string | Appointment status (active or request) |
data.type | string | Appointment type (e.g. customer) |
data.note | string | null | Internal note for the appointment |
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 | Booked service |
data.service.id | string (UUID) | Service ID |
data.service.name | string | Name of the service |
data.course | object | null | Linked course (if appointment is a course appointment) |
data.source | string | Booking source (e.g. oauth) |
data.deleted | boolean | true — appointment has been cancelled |
data.deletedAt | string (ISO 8601) | Time of cancellation |
data.stornoReason | string | null | Cancellation reason, null if no reason given |
data.createdAt | string (ISO 8601) | Creation time |
data.updatedAt | string (ISO 8601) | Last modification time |
Beispiele
bash
curl -X POST "https://my.offisy.at/api/oauth/v2/resource/appointments/b2c3d4e5-f6a7-8901-bcde-f01234567890/cancel" \
-H "Authorization: Bearer {access_token}" \
-H "Content-Type: application/json" \
-d '{
"reason": "beispiel",
"notify": "beispiel"
}'Parameter
Zuerst Token anfordern
Possible errors
| Status | Code | Description |
|---|---|---|
| 401 | invalid_client | Invalid or missing access token |
| 403 | insufficient_scope | Scope appointments missing; or course appointment without scope customers |
| 404 | not_found | Appointment not found or belongs to a different tenant |
| 422 | unprocessable_entity | Appointment is already cancelled or this appointment type cannot be cancelled |