book_appointment
ChatGPTBook a beauty appointment for the user with a specialist: exact nickname, services (by id or exact name), date, startTime (a time check_availability returned; specialist's timezone). Optional notes carry a message to the specialist. Current live prices apply — confirm services, total price, date and time with the user BEFORE calling. A 'pending' result awaits the specialist's approval — say it is not confirmed yet. Bookings are for the user's own account only (no booking for companions).
book_client_appointment
ChatGPTBook an immediately-CONFIRMED appointment for an existing client of the specialist (clientId from find_client) — for requests arriving by text or phone. Services by id or exact name from the specialist's own menu; date and startTime (30-minute grid, specialist's timezone). The specialist's own bookings skip the rest buffer and lead time — only real overlaps fail (the error lists still-free times). Optional clampedDurationMinutes squeezes into a tighter window at full price — only when the specialist says they can work faster. To MOVE an appointment use reschedule_appointment; for a walk-in with no record use book_guest_appointment.
book_guest_appointment
ChatGPTBook a walk-in — anyone without an Icelook account or client record — on the specialist's own calendar: creates a 'Guest #N' contact and an immediately-CONFIRMED appointment in one step (no notifications sent). Same rules as book_client_appointment; if the person IS in the roster use book_client_appointment instead — never create a guest duplicate.
cancel_my_appointment
ChatGPTCancel an appointment the user booked as a client (id from get_my_appointments). A pending request is withdrawn silently; a confirmed appointment REQUIRES reason plans_changed | got_sick | other (reasonDetails exactly with 'other') — ask the user which applies. The specialist is notified. To cancel on the user's OWN specialist calendar use respond_to_appointment action 'cancel'.
check_availability
ChatGPTFind a specialist's free bookable start times for one or more services (exact nickname; services by id or exact name; durations sum into one visit). Scans up to 14 days from dateFrom (default today). Times are HH:MM in the SPECIALIST'S timezone — resolve 'today'/'tomorrow'/weekdays from the returned 'today' and 'weekday' fields, never by your own calendar math. Returned times are exactly what book_appointment accepts. For price/menu questions without a time component use get_specialist_menu.
create_review
ChatGPTPublish the user's review of a COMPLETED appointment (id from get_my_appointments): rating 1-5 stars, optional public comment. Allowed once per appointment, within 3 days after it ends. It cannot be edited or deleted — confirm the rating and exact wording with the user first.
create_services
ChatGPTAdd new services — and service groups — to the specialist's own menu / price list: 'create group Nails with manicure 500' is one direct call with groupName and that service. groupName reuses an existing group or creates a new one (omit for ungrouped). Each service needs name, priceCents (the quoted price in integer cents: 500 → 50000), and durationMinutes (ask if not given). Live on the booking menu immediately; partial success reported per service.
delete_service
ChatGPTRemove ONE service from the specialist's own menu (by id or exact name). No longer bookable; existing appointments keep their booked values. Cannot be undone — make sure the user named the right service.
delete_service_group
ChatGPTRemove ONE service group from the specialist's own menu (by id or exact name). deleteServices required: true also deletes the services inside, false keeps them ungrouped — infer it from the user's words ('keep the services' = false), ask only if unsaid. Cannot be undone.
delete_working_day
ChatGPTClose ONE working day on the specialist's own calendar entirely — the date becomes a day off (one call per date). If appointments are booked, deleting CANCELS them and notifies every client, and then REQUIRES reason: got_sick | schedule_changed | other (+reasonDetails) — ask the user before proceeding. To merely change hours use update_working_day. To know who is affected, read the day with get_my_schedule BEFORE deleting.
find_client
ChatGPTSearch the specialist's own client roster by name substring (omit 'query' to list everyone, most recently active first). Returns each client's id — the handle get_client_details, book_client_appointment and set_client_notes take. Blocked clients are not listed.
get_appointment_history
ChatGPTEvent timeline of ONE appointment on the specialist's own calendar (id from get_my_schedule or get_client_details): who accepted/cancelled/moved it and when, old and new times of reschedules, reminders sent, the client's review. Only for questions about past changes — current state comes from get_my_schedule. For the user's own booking with another specialist use get_my_appointment_history.
get_business_analytics
ChatGPTBusiness analytics for the specialist's own practice — earnings/revenue, appointment totals, client loyalty, review trend, schedule utilization (pick 'areas'; default all). Derive 'period' from the question: a named month → 'custom' with dateFrom/dateTo (the response includes the preceding window for comparison). 'today' works on every plan; other periods need a paid plan — the error names the tier. Money is integer cents. For one client's lifetime stats use get_client_details.
get_client_details
ChatGPTEverything about one client of the specialist (clientId from find_client): private notes, blocked status, lifetime stats (total paid, visit count, first/last visit), pending booking requests, upcoming and recent past appointments, most-used services. Times in the specialist's timezone; money integer cents.
get_my_appointment_history
ChatGPTEvent timeline of ONE appointment the user booked as a client (id from get_my_appointments): who confirmed/cancelled/moved it and when, old and new times of reschedules, reminders sent, the review. Only for questions about past changes — current state comes from get_my_appointments.
get_my_appointments
ChatGPTList the beauty appointments the user booked as a client: all upcoming first (pending or confirmed), then past, newest first; page with pagination.nextCursor and filter rows yourself (no status filter). Times are local to each specialist's timezone; prices integer cents. Row ids feed cancel_my_appointment, reschedule_my_appointment, set_appointment_reminder, and get_my_appointment_history. For the user's own specialist calendar use get_my_schedule instead.
get_my_reviews
ChatGPTThe reviews clients left on the specialist's own profile, with texts, newest first, 20 per page. For aggregate numbers over a period use get_business_analytics area 'reviews'.
get_my_schedule
ChatGPTThe specialist's own beauty-booking calendar. For the next/earliest scheduled working day on or after today, use period 'next_working_day' and OMIT dateFrom/dateTo: Icelook resolves the specialist's local today, includes today even after closing, and returns only the earliest working day within the next 3 months. Do not calculate a date range for this request. For multi-day or explicit-date calendars, use period 'range' (the default; a month from local today unless dates are supplied, max 3 months; past dates work). Returns hours, breaks, appointments (client, services, time, price, status, note), pending counts, and cancelled/rejected bookings separately. Times are local HH:MM; use returned today/timezone, never the device's calendar date. In range mode, missing dates within the returned range are days off. Beauty practice only, never the user's general/work calendar. Appointment ids feed respond_to_appointment, reschedule_appointment, get_appointment_history.
get_my_services
ChatGPTThe specialist's own price list as clients see it: groups and services with ids, prices (integer cents), durations — plus nickname, bio, address, contacts, and booking policy. Ids and exact names feed update_service, delete_service, and book_client_appointment. Read this before bulk edits.
get_specialist_reviews
ChatGPTRead a specialist's public reviews with their texts (exact nickname), newest first, 20 per page. For just the average rating get_specialist_menu is enough.
list_my_specialists
ChatGPTList the specialists the user saved as favorites: nickname (the handle other tools take), name, rating. Use first when the user refers to a specialist loosely ('my nail tech'). There is no public search — if someone is not listed, ask for their exact nickname instead of guessing.
rename_service_group
ChatGPTRename ONE service group on the specialist's own menu (group by id or exact name). The services inside are unchanged.
reschedule_appointment
ChatGPTMove a CONFIRMED appointment on the specialist's OWN calendar to a new date/startTime (30-minute grid, own timezone; services, price and confirmed status stay; the client is notified). ALWAYS use this to move — never cancel and rebook. The specialist's own moves skip the rest buffer; only real overlaps or outside-hours fail. Optional clampedDurationMinutes squeezes into a tighter window at full price — only when the specialist says they can work faster. The user's own booking with another specialist moves via reschedule_my_appointment.
reschedule_my_appointment
ChatGPTMove a CONFIRMED appointment the user booked as a client to a new date/startTime (specialist's timezone; verify the slot with check_availability first; services stay the same). May return to 'pending' if the specialist approves manually — tell the user. To move an appointment on the user's OWN specialist calendar use reschedule_appointment.
respond_to_appointment
ChatGPTAct on an appointment on the specialist's OWN calendar (id from get_my_schedule or get_client_details): accept or reject a PENDING request; complete, no_show, or cancel a CONFIRMED one (complete/no_show only after its start time). cancel REQUIRES reason: got_sick | schedule_changed | other (+reasonDetails) — ask the user which. The client is notified. To MOVE an appointment use reschedule_appointment — never cancel and rebook. For the user's own booking with another specialist use cancel_my_appointment.
set_appointment_reminder
ChatGPTSet, change, or remove the push reminder for an upcoming appointment of the user (id from get_my_appointments). minutesBefore: 15, 30, 60, 120, 1440 (24h) or 2880 (48h) before start — pick the closest and tell the user; null removes the reminder.
set_client_notes
ChatGPTSet the specialist's PRIVATE notes on one of their clients (clientId from find_client). REPLACES the existing note — to append, read current notes via get_client_details first; null clears. The client never sees them.
set_favorite
ChatGPTAdd (favorite true) or remove (false) a specialist by exact nickname in the user's saved favorites — the list list_my_specialists returns.
set_working_days
ChatGPTOpen NEW working days on the specialist's own calendar, 1-365 per call: date, startTime/endTime (30-minute grid; endTime may be 24:00), optional breaks (don't invent unasked ones). Today or later only. Dates that already have a working day are SKIPPED, never overwritten — edit those with update_working_day.
update_bio
ChatGPTSet the bio on the specialist's own public profile (max 128 chars; null clears). Use the user's wording verbatim unless they ask for help. Phones, addresses and social handles never go in the bio — use update_contact_details.
update_booking_policy
ChatGPTChange how clients may book the specialist: requiresApproval (true = bookings arrive as pending requests), minLeadTimeMinutes (how far in advance clients must book), bufferTimeMinutes (rest kept free after each appointment). Binds client bookings only — the specialist's own booking tools bypass both. Future bookings only.
update_contact_details
ChatGPTUpdate only the named contact fields on the specialist's own public profile: instagram, telegram, phoneNumber/2/3 (international format), whatsapp, viber, rawAddress (workplace address). Omitted fields keep their value; null is IGNORED, not an erase — to erase, list field names in 'clear'. Handles and numbers may be pasted as dictated; they are normalized. Check which phone slots are taken via get_my_services before adding, or an existing number is overwritten.
update_service
ChatGPTChange name, priceCents (the quoted price in integer cents: 650 → 65000), durationMinutes, description, and/or group of ONE service on the specialist's own menu (service by id or exact name; group must already exist, null ungroups). Applies to future bookings only. Removing entirely = delete_service.
update_working_day
ChatGPTEdit ONE existing working day on the specialist's own calendar: change hours (startTime AND endTime together) and/or addBreaks / removeBreaks (by break start time). Provide only what the user asked to change. Shrinking hours fails if booked appointments would fall outside — move them first. Past days can't be edited. No working day yet → set_working_days; closing the day → delete_working_day.