Update Appointment
Update an existing appointment
PATCH
/calendar/appointmentsRequires
Bearer authenticationUpdate an existing appointment. Status transitions automatically set timestamps (e.g., confirmed_at, cancelled_at).
Request Body
idstringrequiredThe appointment ID to update.
statusstringNew status: pending, confirmed, completed, cancelled, no_show.
start_timestringReschedule to new start time (ISO 8601).
client_namestringUpdate client name.
client_emailstringUpdate client email.
client_phonestringUpdate client phone.
client_notesstringUpdate client notes.
internal_notesstringUpdate internal notes.
PATCH
/calendar/appointmentscurl -X PATCH "https://api.vastal.agency/v1/calendar/appointments" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "id": "apt_abc123", "status": "completed", "internal_notes": "Great session, follow-up needed" }'
const response = await fetch( 'https://api.vastal.agency/v1/calendar/appointments', { method: 'PATCH', headers: { 'Authorization': 'Bearer YOUR_API_KEY', 'Content-Type': 'application/json' }, body: JSON.stringify({ id: 'apt_abc123', status: 'completed', internal_notes: 'Great session, follow-up needed' }) } ); const data = await response.json();
import requests response = requests.patch( 'https://api.vastal.agency/v1/calendar/appointments', headers={ 'Authorization': 'Bearer YOUR_API_KEY', 'Content-Type': 'application/json' }, json={ 'id': 'apt_abc123', 'status': 'completed', 'internal_notes': 'Great session, follow-up needed' } ) data = response.json()
200Success
{ "appointment": { "id": "apt_abc123", "status": "completed", "internal_notes": "Great session, follow-up needed", "appointment_type": { "id": "type_def456", "name": "Tax Consultation", "duration_minutes": 60, "color": "#3b82f6" } } }
400Bad Request
{ "error": "id is required" }