Skip to main content
Appointment tools give your AI agents real-time access to a booking system. During a call, the agent can check available slots, create a confirmed booking, cancel or reschedule an existing appointment — all without human intervention. Each tool is registered with ElevenLabs as a webhook tool and exposes a no-auth public booking page for self-service scheduling.

How it works

When an agent invokes an appointment tool, ElevenLabs posts a webhook to Sniko with an action parameter. The AppointmentToolService routes the request to the correct handler:
Action valuesHandler
check_availability, get_available_times, availabilityReturn available time slots for a date
book_appointment, book, scheduleCreate a confirmed booking
cancel_appointment, cancelCancel an existing booking
reschedule_appointment, rescheduleCancel the old booking and create a new one

Creating an appointment tool

1

Navigate to Appointment Tools

Open Appointment Tools in the sidebar and click Create Appointment Tool.
2

Fill in the basics

Provide a name and optional description. Select a timezone — all availability windows and booking times are interpreted in this timezone.
3

Set availability

Define which days and hours the tool accepts bookings. For each day of the week (0 = Sunday, 6 = Saturday), specify:
FieldDescription
is_availableWhether this day is open for bookings
start_timeOpening time in HH:MM format
end_timeClosing time in HH:MM format
The form pre-fills with your account’s default availability (Monday–Friday 09:00–17:00 if no default is configured).
4

Add services

At least one service is required. Each service represents a bookable appointment type:
FieldRequiredDescription
NameYesService name shown to callers and in the calendar
DescriptionNoOptional description
DurationYesLength of the appointment in minutes (15–480)
Buffer minutesNoGap added after the appointment before the next slot opens (0–60)
PriceNoOptional price for the service
Max advance daysNoHow many days ahead a booking can be made (1–365, default 30)
Min notice hoursNoMinimum lead time in hours before the appointment (1–168, default 2)
5

Assign agents (optional)

Supply ElevenLabs agent IDs to assign the tool to agents immediately upon creation.
6

Submit

The AppointmentToolService creates the tool, persists availability and services, registers the tool with ElevenLabs, and (if agent IDs were supplied) assigns it to agents — all within a single database transaction.

Booking settings

After creation, fine-grained booking behaviour is configurable from the edit page:
SettingDescription
Max advance daysFurthest future date a booking can be made
Min advance hoursMinimum lead time before the appointment
Buffer time (minutes)Buffer added between consecutive bookings
Default duration (minutes)Fallback duration when the service has none
Allow cancellationWhether callers and agents can cancel bookings
Cancellation hoursMinimum hours before the appointment that cancellation is allowed
Require confirmationWhether bookings start in pending status
Auto-confirmAutomatically move pending bookings to confirmed

Calendar connections

Appointment tools support OAuth-based calendar integrations so bookings appear directly in your external calendar.

Google Calendar

Connects via Google OAuth. Bookings created through the tool are written to the selected Google Calendar and cancellations are reflected automatically.

Microsoft Calendar

Connects via Microsoft OAuth (Azure AD). Uses the Microsoft Calendar webhook controller to sync bookings to Outlook/Microsoft 365.
Calendar connections are managed per tool via the AppointmentToolCalendar relationship. Configure them from the tool’s Integrations tab.

Webhook endpoint

ElevenLabs calls the appointment tool webhook when an agent invokes it during a call:
POST /tools/appointment/{toolId}/{secret}
The secret is a 32-character random string generated at creation time. Requests with an incorrect secret receive a 401 response. Example request for checking availability:
{
  "action": "check_availability",
  "service_type": "Doctor Consultation",
  "preferred_date": "2026-04-15",
  "conversation_id": "conv_abc123"
}
Example response:
{
  "available": true,
  "date": "2026-04-15",
  "day_name": "Wednesday",
  "service": {
    "name": "Doctor Consultation",
    "duration": "30 minutes",
    "price": "$50.00"
  },
  "slots": ["09:00", "09:30", "10:00", "10:30"],
  "total_slots": 4,
  "message": "4 available slots found"
}
Example booking request:
{
  "action": "book",
  "service_type": "Doctor Consultation",
  "preferred_date": "2026-04-15",
  "preferred_time": "10:00",
  "customer_name": "Jane Smith",
  "customer_phone": "+14155550199",
  "customer_email": "[email protected]",
  "notes": "First visit",
  "conversation_id": "conv_abc123"
}
A successful booking returns a confirmation code and full appointment details:
{
  "success": true,
  "booking_id": 42,
  "confirmation_code": "XKQT8BNR",
  "message": "Appointment confirmed for Wednesday, Apr 15, 2026 at 10:00 AM. Your confirmation code is XKQT8BNR.",
  "details": {
    "service": "Doctor Consultation",
    "duration": "30 minutes",
    "date": "Wednesday, Apr 15, 2026",
    "time": "10:00 AM",
    "timezone": "America/New_York",
    "customer_name": "Jane Smith",
    "confirmation_code": "XKQT8BNR"
  }
}
The agent ElevenLabs tool definition instructs the agent to always call check_availability before calling book to avoid booking into unavailable slots.

Public booking page

Every appointment tool has a shareable, no-authentication booking page:
GET /book/{uuid}
The UUID is generated at creation time. Share this URL with customers so they can book directly without going through a phone call. The page shows available services, a date picker filtered to the tool’s availability windows, and time slots generated in real time. The public URL is also available as the public_url attribute on the tool and is shown in the tool detail view.

Registering with ElevenLabs

Creating an appointment tool automatically registers it with ElevenLabs via registerWithElevenLabs in the service. The ElevenLabs tool definition sent to POST /convai/tools includes:
  • Tool name: appointment_booking_{id}
  • Available actions: check_availability, get_available_times, book_appointment, book, schedule, cancel_appointment, cancel, reschedule_appointment, reschedule
  • Required parameters: action
  • Optional parameters: service_type, preferred_date, preferred_time, customer_name, customer_email, customer_phone, booking_id, confirmation_code, notes
To unregister a tool, delete it. The controller calls unregisterTool before deletion, which sends DELETE to the ElevenLabs tools API.
A tool with upcoming confirmed bookings cannot be deleted. Cancel or complete those bookings first.

Assigning to agents

1

Open the tool detail page

Click the tool name from the Appointment Tools index.
2

Assign agents

Provide one or more ElevenLabs agent IDs. Sniko persists each assignment in the AppointmentToolAgent table and sends POST /agents/{agentId}/tools for each agent.
To remove an agent assignment, update the tool and omit the agent ID from the agent_ids array. The service calls agents()->detach() and re-creates only the supplied assignments.

Managing bookings

Calendar view

Navigate to Calendar from the Appointment Tools sidebar entry to see all bookings across all your tools on a monthly calendar. You can filter by a specific tool using the dropdown. Each booking event shows customer name, tool name, service, status, and notes. Use the Calendar action on a specific tool’s detail page to see only that tool’s bookings. Booking statuses:
StatusDescription
pendingBooking created but not yet confirmed
confirmedBooking is confirmed
cancelledBooking was cancelled
completedBooking was marked as complete

Cancel a booking

Click Cancel on any confirmed or pending booking. The cancellation policy on the tool (minimum hours before the appointment) is enforced. On success, the booking status is set to cancelled and cancelled_at is recorded.

Complete a booking

Click Complete on a confirmed booking to mark it as finished. Cancelled bookings cannot be completed.

Export bookings

Click Export on the tool detail page to download all bookings as a CSV file. The export includes ID, customer name, email, phone, service, appointment date, start/end times, status, confirmation code, notes, internal notes, timezone, created at, and cancelled at.

Build docs developers (and LLMs) love