Book an appointment
book_appointmentBooks an appointment at an open time from check_availability. Works only when booking_mode is instant; otherwise it fails with booking_requires_confirmation or booking_disabled, and you should tell the owner instead of retrying. Identify the customer with contact_id (a contact that has a phone number) or contact_phone. Fails with slot_unavailable if the time was taken; check availability again and offer another time. Confirm the service, time and customer with the owner before calling.
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"service_id": "<service_id>",
"starts_at": "<starts_at>"
},
"name": "book_appointment"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| staff_id | No | Preferred staff member, if the customer asked for one. | |
| starts_at | Yes | A starts_at value from check_availability, unchanged. | |
| contact_id | No | An existing contact that has a phone number. Give contact_id or contact_phone. | |
| service_id | Yes | The service id (UUID). | |
| sms_consent | No | True only if the customer agreed to confirmation and reminder texts. Never assume it. Has no effect on LobbyStack Cloud, where only the receptionist collects text consent, on a call. | |
| contact_name | No | Customer name, used when a new contact is created. | |
| contact_phone | No | Customer phone in E.164 format. A new contact is created if none has this number. | |
| idempotency_key | No | Optional. A unique value you choose, such as a UUID. Retrying with the same value within 24 hours returns the first result instead of creating a duplicate. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Stable identifier (UUID). | |
| notes | Yes | Notes on the appointment. The receptionist can read them to a verified caller. | |
| source | Yes | Where the booking came from, for example voice, web_chat, dashboard or api. | |
| status | Yes | ||
| ends_at | Yes | ISO 8601 timestamp in UTC. | |
| staff_id | Yes | Stable identifier (UUID). | |
| timezone | Yes | ||
| starts_at | Yes | ISO 8601 timestamp in UTC. | |
| contact_id | Yes | Stable identifier (UUID). | |
| created_at | Yes | ISO 8601 timestamp in UTC. | |
| service_id | Yes | Stable identifier (UUID). | |
| staff_name | Yes | ||
| updated_at | Yes | ISO 8601 timestamp in UTC. | |
| contact_name | Yes | ||
| service_name | Yes | ||
| contact_phone | Yes | ||
| calendar_sync_status | Yes |