# Book Fresha appointments from client messages with an AI agent

> Turn a booking request from email, Instagram or WhatsApp into a Fresha appointment: match the client, fit every service, book after your OK.

Source: https://cotlet.dev/integrations/fresha-api-mcp-server/book-appointments-with-ai

Plenty of booking requests never touch your Fresha booking link. A regular sends "Friday afternoon with Sam, cut and colour?" by email, Instagram DM or WhatsApp, and someone at the front desk has to stop, open the Fresha calendar, find a gap long enough for both services and type a reply.

Cotlet does it in your own Fresha account with list\_clients, get\_client, add\_client, list\_services, list\_team\_members, find\_available\_slots and create\_appointment, called by your AI agent, an n8n workflow or a script.

[Request access](https://cotlet.dev/app/signup?app=fresha) [All Fresha tools](https://cotlet.dev/integrations/fresha-api-mcp-server)

Hosted · nothing to install or maintain

Official options

## Can Fresha do this on its own?

Fresha has no public API for booking (checked 12 Oct 2026). Fresha offers its own online booking, Client Connect chat that clients open from their confirmed booking page in the Fresha app, and an AI Concierge add-on that answers incoming calls and messages. The gap: a request that reaches you by email, Instagram or WhatsApp still has to be booked by hand in the Fresha calendar, and Fresha gives your own agent no way to book.

By hand

## How you do it in Fresha today

1. Read the request in the app it arrived in (email, Instagram or WhatsApp) and work out the client, the services and the preferred team member and time.
2. In Fresha, open Calendar, click Add in the toolbar and select Appointment, then pick the existing client or create a new client profile.
3. Select the first service with Add service, add the second one the same way and set the requested team member on each service.
4. Click Continue to see open slots for the day. When nothing fits, try Next available date, Check all professionals or Join the waitlist, then Continue and Save.
5. Go back to the message app and type the confirmed time to the client. Every request means switching between two apps, and a misread service length or a second client with the same first name ends up as a wrong booking.

With an agent

## How to book Fresha appointments from client messages with an AI agent

Prompt

```
Anna Smith just emailed asking for a cut and colour with Sam on Friday afternoon. Find her in Fresha, book the first slot that fits both services and draft my reply.
```

1. 01  
### Match the sender to one client profile  
The agent searches list\_clients by the phone number or email the message came from, then by name. Two profiles with the same name mean it stops and asks which one. No match at all means a new profile with add\_client, using only the details the client gave.
2. 02  
### Turn the wording into service IDs  
"Cut and colour" becomes two IDs from list\_services, in the order the salon performs them. list\_team\_members confirms that Sam offers both at this location; if not, the agent says so instead of booking Sam for one service only.
3. 03  
### Search only the window the client named  
find\_available\_slots runs for Friday with Sam. The agent keeps the slots that start after noon and still end before closing. If Sam has nothing, it checks Saturday with Sam and Friday with anyone, and offers both instead of choosing for the client.
4. 04  
### Check the profile before booking  
get\_client shows upcoming appointments, so a client who already holds a Friday booking is not booked twice. Team notes, such as a colour formula, go into the summary for the stylist.
5. 05  
### Book with a named team member, then draft the reply  
create\_appointment waits for your OK and always passes team\_member\_id, because a booking made by staff in the calendar does not go through Fresha's automatic assignment rules. After the booking the agent writes a short reply with the date, time, stylist and services for you to send in the channel the request came from.

### What you get back

Example data

```
Matched: Anna Smith (+44 7700 900123), last visit 20 Jun, Colour
Services: Haircut 45 min + Colour 90 min, 2 h 15 min with Sam
Friday 16 Oct with Sam: 14:30 to 16:45 free, 13:00 too short
Booked after your OK: Fri 16 Oct 14:30, Sam, status Booked
Note for Sam: "Prefers a warm toner, no fragrance."
Draft reply: "Hi Anna, you are booked with Sam on Friday 16 Oct at 2:30 pm for a cut and colour. See you then!"
```

### Other ways to ask

- Here are three booking requests from this morning's inbox. Book each one and give me a reply for each.
- A new client, Maya Patel, +44 7700 900456, wants a gel manicure next Tuesday after 5 pm with anyone. Create her profile and book it.
- Do not book yet. Tell me the two best Friday options for Anna with Sam so I can offer them.
- Book Anna every four weeks for a root touch-up with Sam until December, same weekday and time if free.

Before you automate it

## What Fresha allows, and what to know first

- Fresha applies its New appointment assignment strategy (Fill open calendars, Take turns and the others) only to online bookings with no team member preference; appointments your team creates in the Calendar are not assigned automatically.
- Fresha lets staff double book the same time slot from the Calendar, so a booking made by hand does not stop an overlap on its own.
- Fresha sends the client a booking confirmation according to your notification settings, and with appointment protection switched on the client must pay upfront or add card details.
- Fresha Client Connect messages start from the client's confirmed booking page in the Fresha app, and Fresha lists Meta and Instagram messaging as a planned expansion on its Connect page.

create\_appointment asks for your OK by default. To run it on a schedule without you, switch confirmation off for that tool in your dashboard.

Sources: [Fresha Help Center: Create appointments](https://www.fresha.com/help-center/knowledge-base/calendar/260-create-appointments-1) · [Fresha Help Center: Set up new appointment assignment](https://www.fresha.com/help-center/knowledge-base/calendar/102178-set-up-new-appointment-assignment) · [Fresha: Connect (Client Connect and AI Concierge)](https://www.fresha.com/for-business/features/connect)

REST

## Call create\_appointment from a script

curl

```
curl https://cotlet.dev/api/v1/fresha/create_appointment \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"client_id":"cl_48213977","start_at":"2026-10-16T14:30:00+01:00","service_ids":["sv_1203","sv_1288"],"team_member_id":"tm_5521"}'
```

Example response

```
{
"appointment_id": "ap_90311245",
"status": "Booked",
"start_at": "2026-10-16T14:30:00+01:00",
"end_at": "2026-10-16T15:15:00+01:00",
"services": [
{
"service_id": "sv_1203",
"name": "Haircut",
"price": "45.00",
"currency": "GBP"
}
],
"team_member": "Sam"
}
```

MCP: add https://cotlet.dev/mcp/v1 with the same key; the tool is fresha\_create\_appointment. Example data.

[Schedule it in n8n, Make, Zapier or cron](https://cotlet.dev/integrations/fresha-api-mcp-server#automations)

Tools

## Fresha tools this automation uses

__Cotlet Fresha tools used to book Fresha appointments from client messages with an AI agent__
| Tool | Parameters |
| ---------------------- | ------------------------------------------------------------------------- |
| list\_clients | search, last\_appointment\_before, location\_id, limit, cursor |
| get\_client | client\_id |
| add\_client | first\_name, last\_name, email, phone |
| list\_services | location\_id |
| list\_team\_members | location\_id |
| find\_available\_slots | service\_ids, date, team\_member\_id, location\_id |
| create\_appointment | client\_id, start\_at, service\_ids, team\_member\_id, location\_id, note |

[All 14 Fresha tools with descriptions](https://cotlet.dev/integrations/fresha-api-mcp-server#tools)

## Frequently asked questions

### Can the client pick a different team member for each service?

Yes. Fresha lets you set the team member on each service of an appointment, and its Allow splitting multi-service appointments across team members setting does the same for online bookings.

## More Fresha automations

- [Reschedule or cancel a Fresha team member's appointments when they are out](https://cotlet.dev/integrations/fresha-api-mcp-server/reschedule-appointments-in-bulk)
- [Get a daily Fresha sales summary every morning](https://cotlet.dev/integrations/fresha-api-mcp-server/daily-sales-summary)
- [Fresha API and MCP server: every tool](https://cotlet.dev/integrations/fresha-api-mcp-server)
- [All use cases](https://cotlet.dev/use-cases)

## Give your agent access to Fresha.

Free 7-day trial with 5,000 credits, no card needed. Cotlet is independent and not affiliated with Fresha.

[Request access](https://cotlet.dev/app/signup?app=fresha)
