Demo only: this is a sample calendar. Appointments shown here are not real.

Thai Wellness Center (Demo)

AI Front Desk preview, prepared by HMS Consulting

Developer API

All endpoints are POST, accept and return JSON, and include a spoken-style message the assistant can read aloud. Times are Eastern (America/New_York).

Base URL
…
Required header
x-demo-key: <DEMO_API_KEY>

Tip: for ElevenLabs tools, use the published site address as the base URL once you publish.

Test it

Runs the same booking logic as the endpoints. Keep the dashboard open in another tab to watch it update live.

POST/get-availability

Open start times on a date (plus up to 3 nearby days if full).

Fields: date (YYYY-MM-DD), duration_minutes (30/60/90), service?

Sample request
{
  "date": "2026-10-10",
  "duration_minutes": 60,
  "service": "Deep Tissue"
}
Sample response
{
  "ok": true,
  "date": "2026-10-13",
  "available_times": [
    {
      "start_time": "2026-10-13T10:00:00",
      "spoken_time": "10:00 AM"
    }
  ],
  "message": "On Tuesday, October 13, I have 10:00 AM, 10:30 AM… available for 60 minutes."
}
curl
curl -X POST /get-availability \
  -H "Content-Type: application/json" \
  -H "x-demo-key: YOUR_DEMO_API_KEY" \
  -d '{"date":"2026-10-10","duration_minutes":60,"service":"Deep Tissue"}'
POST/create-booking

Validate rules and capacity, create the booking, log it and send the confirmation email.

Fields: client_name, phone, email, service, duration_minutes, start_time (ISO, Eastern), notes?, source (voice|chat)

Sample request
{
  "client_name": "Maria Santos",
  "phone": "(571) 555-0142",
  "email": "maria@example.com",
  "service": "Deep Tissue",
  "duration_minutes": 60,
  "start_time": "2026-10-10T14:00",
  "notes": "Prefers firm pressure",
  "source": "voice"
}
Sample response
{
  "ok": true,
  "confirmation_code": "TWC-7K3M",
  "booking": {
    "service": "Deep Tissue",
    "start_time": "2026-10-13T14:00:00",
    "spoken_time": "Tuesday, October 13 at 2:00 PM"
  },
  "email_status": "preview_only",
  "message": "You're all set, Maria. Deep Tissue for 60 minutes on Tuesday, October 13 at 2:00 PM…"
}
curl
curl -X POST /create-booking \
  -H "Content-Type: application/json" \
  -H "x-demo-key: YOUR_DEMO_API_KEY" \
  -d '{"client_name":"Maria Santos","phone":"(571) 555-0142","email":"maria@example.com","service":"Deep Tissue","duration_minutes":60,"start_time":"2026-10-10T14:00","notes":"Prefers firm pressure","source":"voice"}'
POST/find-booking

Find upcoming confirmed bookings by code, or by phone (optionally with name).

Fields: confirmation_code? or phone? plus client_name?

Sample request
{
  "phone": "(571) 555-0142",
  "client_name": "Maria"
}
Sample response
{
  "ok": true,
  "bookings": [
    {
      "confirmation_code": "TWC-7K3M",
      "service": "Deep Tissue",
      "spoken_time": "Tuesday, October 13 at 2:00 PM"
    }
  ],
  "message": "I found your Deep Tissue on Tuesday, October 13 at 2:00 PM…"
}
curl
curl -X POST /find-booking \
  -H "Content-Type: application/json" \
  -H "x-demo-key: YOUR_DEMO_API_KEY" \
  -d '{"phone":"(571) 555-0142","client_name":"Maria"}'
POST/reschedule-booking

Move a booking to a new time and send an updated confirmation.

Fields: confirmation_code, new_start_time (ISO, Eastern), source

Sample request
{
  "confirmation_code": "TWC-7K3M",
  "new_start_time": "2026-10-10T16:00",
  "source": "voice"
}
Sample response
{
  "ok": true,
  "late_change": false,
  "message": "Done. Your Deep Tissue is now on Tuesday, October 13 at 4:00 PM…"
}
curl
curl -X POST /reschedule-booking \
  -H "Content-Type: application/json" \
  -H "x-demo-key: YOUR_DEMO_API_KEY" \
  -d '{"confirmation_code":"TWC-7K3M","new_start_time":"2026-10-10T16:00","source":"voice"}'
POST/cancel-booking

Cancel a booking. Inside 24 hours it is flagged as a late cancellation.

Fields: confirmation_code, reason?, source

Sample request
{
  "confirmation_code": "TWC-7K3M",
  "reason": "Schedule conflict",
  "source": "voice"
}
Sample response
{
  "ok": true,
  "late_cancel": false,
  "message": "Your Deep Tissue on Tuesday, October 13 at 2:00 PM is cancelled…"
}
curl
curl -X POST /cancel-booking \
  -H "Content-Type: application/json" \
  -H "x-demo-key: YOUR_DEMO_API_KEY" \
  -d '{"confirmation_code":"TWC-7K3M","reason":"Schedule conflict","source":"voice"}'

Errors return ok: false with a friendly message (401 bad key, 400 bad input, 409 time taken, 422 rule violation). Example start time: 2026-10-08T18:41