📊 Analytics Dashboard

Comprehensive chatbot usage analytics across Olive and Chloe.

Sessions
Completed
Messages
Clinics
Scheduled
Showed
Avg Duration
Msgs/Sess
🔍 Diagnostics
📡 Last Request
URL
Status
Latency
Payload
📊 Data Checks
Sessions: —
Messages: —
Clinics: —
Month Span: —
Appointments: —
📜 Event Log

Sessions Over Time

Time of Day Usage

Day of Week

Completion Rate

Intent Distribution

Data Collection Rates

Conversation Role Breakdown

Appointment Funnel

Scheduling Provider Distribution

Messages Per Session Distribution

Average: | Min: | Max:

Session Duration

Average: minutes

Sessions by Clinic

Clinic Directory

ClinicCityStateSchedulingSessions
📊 Engagement
📧
Email
📱
Phone
🎂
DOB
Permission
🎯
Intent
🧪
Preg Test
📋
Appt Req
🌐
📧

Email

Oct 2025 – Mar 2026
0%
0Captured
0Total Sessions
0Missing

Monthly Trend

Day of Week

Clinic Leaderboard sorted by capture rate

🩺 Health Check

Is every bot working right now? Green means ready. Red means something needs attention.

chatting now
Checking...
Live Activity
Waiting for activity...
❤️
conversations this year
appointments booked
CLM Network
Active Idle
Loading health status...

📅 Acuity Scheduling Debug

Test & diagnose Acuity scheduling integration per-clinic

DB Config Source: Refresh presets to load from selected environment

🔄 What does "Refresh" do?

The Refresh button checks our databases for any clinics that use Acuity scheduling, then looks up their current calendar and appointment information. Here's what happens step by step:

🗄️
Step 1 — Check the Databases
We look in both the Olive database and the Chloe database for any clinic that has Acuity scheduling credentials saved. This tells us which clinics are set up to use Acuity for appointment booking.
📋
Step 2 — Gather Clinic Info
For each clinic found, we pull back its name, location (city & state), timezone, and any appointment type mappings that the chatbot uses to know which Acuity service to book (e.g. "pregnancy test" → Acuity type #9959384).
📡
Step 3 — Call the Acuity API (Calendars)
For each clinic, we call Acuity's live API to get the list of calendars — these represent locations or scheduling groups. For example, Avenue Women's Center has 8 calendars (Darien, Elmhurst, Naperville, etc.).
📅
Step 4 — Call the Acuity API (Appointment Types)
We also ask Acuity for all appointment types that each clinic offers — things like "Pregnancy Test", "Ultrasound", "Consultation", etc. We record each one's duration, whether it's public or private, and which calendars it's available at.
Step 5 — Update the Dropdown
Everything is combined into a complete profile for each clinic, and the preset dropdown above is rebuilt with the latest list. You can then select any clinic to load its credentials and see its full profile.
💡 When should I use this?
Hit Refresh whenever a new clinic has been onboarded to Olive or Chloe with Acuity scheduling, or when a clinic's Acuity setup has been changed (new calendars, new appointment types, etc.). The static presets above are a snapshot — Refresh gets you the live truth.
Discovery
Availability
Calendar Matrix
Pipeline Simulator
Simulate Booking
Appointments
Diagnostics
Raw API
Request Log
API Reference
Blocks
Clients
Config Validator

Account Discovery

Connect with credentials to discover calendars, appointment types, and account configuration.

Availability Inspector

Fetch available timeslots exactly as the chatbot does — per calendar, per day — and inspect each response.

Availability Dates Calendar

See which dates have available slots this month (uses /availability/dates).

Calendar Availability Matrix

Visual heatmap showing which days each calendar has available slots, aggregated over the next 4 weeks. Rows are calendars, columns are days of the week, and cell values are the total slot count across all 4 weeks.

Pipeline Simulator — Olive vs Chloe

Runs both chatbots' exact source code logic against the same Acuity API data, side by side.
Every stage shows the data shape and flags where the two pipelines diverge — exposing bugs unique to each.
✅ Updated March 2026 — reflects Chloe fixes: {{show_choices}} parser, appt_type_map routing, multi-type support.

Booking Simulation

Walk through the exact booking flow the chatbot uses. This simulates the race condition by fetching slots, then attempting to book — showing whether the slot is still available.

Click below to fetch available timeslots (same as chatbot getUpcomingTimes()).

Select a timeslot from the fetched results (simulates user clicking a button).

Re-check if the selected slot is still available (the chatbot does NOT do this — this is the gap).

Preview the exact payload that createAcuityAppointment() would send to Acuity.

Appointment History

View recent appointments, verify bookings, and cancel test appointments.

Acuity API Reference

Interactive documentation for all Acuity Scheduling API v1 endpoints. Click Try It → to populate the Raw API tab.

📘 API Reference — Help Guide

📌
What Is This?
A complete reference guide for every Acuity Scheduling API endpoint. Shows what each endpoint does, what data it needs, and lets you try calls instantly with one click — no coding needed.
🌐
Where Does the Data Come From?
Each endpoint connects to Acuity's cloud servers using the clinic's credentials (User ID + API Key) that you entered in the Connection panel at the top of this page.
💡
Why Would I Use This?
Use this when you need to understand what API calls the chatbot makes, troubleshoot a specific endpoint, or test a call manually. Great for figuring out what data Acuity returns and whether an issue is on Acuity's side or ours.
🔧
How Do I Use It?
1. Connect first — enter credentials and click Connect above.
2. Browse the endpoint categories (Account, Calendars, Appointments, etc.).
3. Click "Try It →" on any endpoint to auto-fill the Raw API tab.
4. Switch to the Raw API tab and click Send to execute the call.
💡 Tip: You don't need to know the API to use this tool — just browse the cards, read the descriptions, and click "Try It" to experiment safely. No data is changed by GET requests.

Account

GET /me

Returns account details including timezone, owner name, and plan info.

No parameters required.

Calendars

GET /calendars

Returns all calendars on the account. Each calendar has an id, name, description, location, and timezone.

No parameters required.

Appointment Types

GET /appointment-types

Returns all appointment types. Use includeDeleted=true to include soft-deleted types.

Param Type Req Description
includeDeletedbooleanNoInclude deleted appointment types

Availability

GET /availability/dates

Returns dates with available slots for a given month. Used by chatbot to show date picker.

Param Type Req Description
monthstringYesYYYY-MM format
appointmentTypeIDintYesAppointment type ID
calendarIDintNoFilter to specific calendar
timezonestringNoIANA timezone (e.g. America/New_York)
GET /availability/times

Returns specific available times for a given date. Each result includes a time ISO string.

Param Type Req Description
datestringYesYYYY-MM-DD format
appointmentTypeIDintYesAppointment type ID
calendarIDintNoFilter to specific calendar
timezonestringNoIANA timezone
POST /availability/check-times

Check if specific times are still available. Send array of datetimes in request body.

Body field Type Req Description
timesarrayYesArray of ISO datetime strings to check
appointmentTypeIDintYesAppointment type ID
calendarIDintNoFilter to specific calendar

Appointments

GET /appointments

List appointments with optional filtering. Default is future appointments sorted ascending.

Param Type Req Description
maxintNoMax results (default 25)
minDatestringNoYYYY-MM-DD minimum date
maxDatestringNoYYYY-MM-DD maximum date
calendarIDintNoFilter to calendar
appointmentTypeIDintNoFilter to type
canceledbooleanNotrue = only canceled
firstNamestringNoFilter by first name
lastNamestringNoFilter by last name
emailstringNoFilter by email
directionstringNoASC or DESC
POST /appointments

Create a new appointment. The chatbot calls this via createAcuityAppointment().

Body field Type Req Description
datetimestringYesISO datetime from availability/times
appointmentTypeIDintYesAppointment type ID
calendarIDintNoCalendar to book on (auto-selected if omitted)
firstNamestringYesClient first name
lastNamestringYesClient last name
emailstringYesClient email
phonestringNoClient phone number
timezonestringNoIANA timezone for the appointment
GET /appointments/:id

Get a single appointment by ID. Returns full appointment object.

Param Type Req Description
idintYesAppointment ID (path parameter)
PUT /appointments/:id

Update an appointment. Can change any field including firstName, lastName, email, phone, notes.

Param Type Req Description
idintYesAppointment ID (path parameter)
firstNamestringNoUpdate first name
lastNamestringNoUpdate last name
emailstringNoUpdate email
notesstringNoUpdate notes
PUT /appointments/:id/cancel

Cancel an appointment. Can optionally mark as no-show.

Body field Type Req Description
cancelNotestringNoReason for cancellation
noShowbooleanNoMark as no-show instead of cancel
PUT /appointments/:id/reschedule

Reschedule an existing appointment to a new datetime. Keeps all client info.

Body field Type Req Description
datetimestringYesNew ISO datetime from availability/times
calendarIDintNoNew calendar (optional)
timezonestringNoIANA timezone

Blocks

GET /blocks

List calendar blocks (time-off / unavailable periods).

Param Type Req Description
maxintNoMax results
minDatestringNoYYYY-MM-DD
maxDatestringNoYYYY-MM-DD
calendarIDintNoFilter to calendar
POST /blocks

Create a new block (unavailable period) on a calendar.

Body field Type Req Description
calendarIDintYesCalendar to block
startstringYesISO datetime start
endstringYesISO datetime end
notesstringNoBlock reason/notes
GET /blocks/:id

Get a single block by ID.

DEL /blocks/:id

Delete a block by ID. No request body needed.

Clients

GET /clients

List/search clients. Returns array of client objects.

Param Type Req Description
searchstringNoSearch by name, email, or phone
POST /clients

Create a new client. Body: firstName, lastName, email, phone, notes.

PUT /clients

Update a client. Body: id (required), plus fields to update.

DEL /clients

Delete a client. Body: id (required).

Forms

GET /forms

Returns all intake forms configured in the account. Includes field IDs needed for form submissions.

Labels

GET /labels

Returns all labels (color-coded tags) available on the account.

Blocks Manager

View, create, and delete calendar blocks (time-off / unavailable periods).

🚧 Blocks Manager — Help Guide

📌
What Is This?
A tool for viewing, creating, and deleting calendar "blocks" — periods of time when a calendar is marked unavailable. Blocks prevent clients from booking during those times (holidays, lunch breaks, staff meetings, etc.).
🌐
Where Does the Data Come From?
Data comes from Acuity's /blocks API endpoint. Blocks are attached to specific calendars (locations or scheduling groups) within the clinic's Acuity account.
💡
Why Would I Use This?
Use this when a clinic needs to mark time as unavailable or when troubleshooting why certain times aren't showing as bookable to the chatbot. Common causes: overlapping blocks or forgotten time-off entries.
🔧
How Do I Use It?
1. Connect first (credentials + Connect above).
2. Select a specific calendar from the dropdown, or leave as "All Calendars".
3. Set a date range and click "Fetch Blocks" to see existing blocks.
4. To add a block: fill in start/end times, select a calendar, click "Create Block".
5. To remove a block: click the delete button on any listed block.
⚠️ Caution: Creating and deleting blocks affects the live calendar. A new block will immediately prevent bookings during that time. Deleting a block re-opens the time for booking.

Create New Block

Clients Lookup

Search Acuity clients by name, email, or phone.

👥 Clients Lookup — Help Guide

📌
What Is This?
A search tool for looking up client records in the clinic's Acuity account. Search by first name, last name, email, or phone number to find anyone who has booked an appointment.
🌐
Where Does the Data Come From?
Data comes from Acuity's /clients API endpoint. Returns client profiles stored in the clinic's Acuity account — these are people who have previously booked or been added as clients.
💡
Why Would I Use This?
Use this to find a specific client's record, verify their contact info, or check if they exist in the system. Helpful when a user reports they can't book and you need to verify their details match what's on file.
🔧
How Do I Use It?
1. Connect first (credentials + Connect above).
2. Enter at least one search field (first name, last name, email, or phone).
3. Click "Search" to find matching clients.
4. Results show each client's name, email, phone, and any notes on their account.
💡 Tip: Searches are partial-match — entering just "Jane" in the first name field will return all clients named Jane. Leave fields empty to skip that filter.

Configuration Validator

Validate that the current Acuity credentials and configuration are correctly set up for chatbot scheduling.

✅ Config Validator — Help Guide

📌
What Is This?
An automated health-check tool that runs 7 validation tests on a clinic's Acuity setup. It catches configuration problems that would prevent the chatbot from booking appointments successfully.
🌐
Where Does the Data Come From?
Tests run against the live Acuity API using the connected clinic's credentials. Checks everything from basic connectivity to appointment type matching and timezone alignment.
💡
Why Would I Use This?
Use this when setting up a new clinic, after making configuration changes, or when the chatbot is failing to book. The validator tells you exactly what's wrong — bad credentials, missing appointment types, timezone mismatch, etc.
🔧
How Do I Use It?
1. Connect first (credentials + Connect above).
2. Optionally enter an Appointment Type ID and expected timezone for deeper checks.
3. Click "Run Validation".
4. Review results: ✅ green = pass, ⚠️ yellow = warning, ❌ red = failure. Each item explains what was tested.
💡 Tip: Run this whenever a clinic reports booking issues — it's the fastest way to identify whether the problem is in our config or on Acuity's side. The 7 checks cover: credentials, calendars, appointment types, availability, intake forms, timezone, and overall health.

Automated Diagnostics

Runs automated checks against the Acuity account to detect known issues that cause the reported bugs.

Raw API Explorer

Make arbitrary Acuity API calls and see the full response.

Request Log

Complete log of all API requests made during this session.