Book appointment
Book a client into an open time for an appointment type.
MCP tool acuity_scheduling_write → book_appointment
write Confirm
Creates an appointment for the client at the datetime you pass, for the appointment type and calendar. Pass a time returned by check_availability_times. The client needs a first and last name (Acuity requires both for a client profile). Returns the new appointment with its ID and confirmation link. By default you confirm each call; you can switch that off for this tool.
Parameters
| Name | Type | Description |
|---|---|---|
| appointment_type_id integer required | integer | Appointment type ID from list_appointment_types. |
| datetime string required | string | Start time from check_availability_times, e.g. '2026-11-03T10:00:00-0500'. |
| first_name string required | string | Client first name. |
| last_name string required | string | Client last name. |
| email string | string | Client email. |
| phone string | string | Client phone. |
| calendar_id integer | integer | Calendar ID from list_appointment_types or list_appointments. Without it, every calendar that offers the type is checked. |
| timezone string | string | Long-form timezone ID, e.g. 'America/New_York'. |
tools/call
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "acuity_scheduling_write",
"arguments": {
"operation": "book_appointment",
"arguments": {
"appointment_type_id": 5120043,
"calendar_id": 27238,
"datetime": "2026-11-03T10:00:00-0500",
"first_name": "Dana",
"last_name": "Reyes",
"email": "dana@example.com"
}
}
}
} Example response
{
"content": [
{
"type": "text",
"text": "{ ... same JSON as structuredContent ... }"
}
],
"structuredContent": {
"appointment_id": 1841502,
"first_name": "Dana",
"last_name": "Reyes",
"email": "dana@example.com",
"type": "Initial consult",
"calendar": "Main",
"datetime": "2026-11-03T10:00:00-0500",
"duration": 60,
"price": "90.00",
"paid": "no",
"confirmation_page": "https://acuityscheduling.com/schedule.php?owner=11111111&action=appt&id%5B%5D=def456"
},
"isError": false
}