API reference/Appointments
Move an appointment
Try itMoves a pending or booked appointment to another OPEN time (a `key` from list_open_times with appointment_id). Moving confirms it, emails the visitor the new time and resets the reminder. A time someone else holds is 409.
POST
/api/v1/sites/{site_id}/appointments/{appointment_id}/moveAuthentication
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: move_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
starts_atstringBody · required- The new start: a slot key from list_open_times.
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/move' \
-H "Authorization: Bearer $WEBSITEBUDDY_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"starts_at":"2026-10-22T14:00:00.000Z"}'{
"site_id": "SITE_ID",
"appointment_id": "APPOINTMENT_ID",
"starts_at": "2026-10-22T14:00:00.000Z"
}{
"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
}