API reference/Appointments
Decline an appointment
Try itDeclines a booking that is waiting for your answer. The visitor is told and the time is open again.
POST
/api/v1/sites/{site_id}/appointments/{appointment_id}/declineAuthentication
An API key as Authorization: Bearer or x-api-key. It needs the bookings:write scope — set booking hours; confirm, decline, cancel and move appointments (live at once, the visitor is emailed).
bookings:writeChanges the live siteIdempotency-Key requiredMCP tool: decline_appointment
Parameters
Named placeholders go in the path; the rest in a JSON body.
site_idstringPath · required- The site's id.1 to 100 characters
appointment_idstringPath · required- The appointment's id.1 to 100 characters
Response
200 with JSON on success (schema on the right). Errors use the standard envelope; a retry with the same Idempotency-Key gets the first answer back (how retries work).
curl -X POST 'https://websites.workflowcorp.com/api/v1/sites/SITE_ID/appointments/APPOINTMENT_ID/decline' \
-H "Authorization: Bearer $WEBSITEBUDDY_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{}'{
"site_id": "SITE_ID",
"appointment_id": "APPOINTMENT_ID"
}{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"pending",
"confirmed",
"declined",
"cancelled"
]
},
"status_words": {
"type": "string",
"description": "The status as the inbox says it: \"Waiting for your answer\", \"Booked\"…"
},
"starts_at": {
"type": "string",
"description": "ISO instant."
},
"ends_at": {
"type": "string"
},
"when": {
"type": "string",
"description": "\"Tuesday, October 20 at 9:00 AM\" in the booking time zone."
},
"service": {
"type": "string"
},
"name": {
"type": "string"
},
"email": {
"type": "string"
},
"phone": {
"type": "string"
},
"notes": {
"type": "string"
},
"message_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "The form message it arrived with (list_submissions)."
},
"decided_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"reminder_sent_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"customer_changed_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "When the customer last cancelled or moved it themselves (the link in their emails); null = never."
},
"is_sample": {
"type": "boolean"
},
"created_at": {
"type": "string"
},
"message": {
"type": "string",
"description": "What happened, in plain words (the same sentence the inbox shows)."
}
},
"required": [
"id",
"status",
"status_words",
"starts_at",
"ends_at",
"when",
"service",
"name",
"email",
"phone",
"notes",
"message_id",
"decided_at",
"reminder_sent_at",
"customer_changed_at",
"is_sample",
"created_at",
"message"
],
"additionalProperties": false
}