Local services & SaaS
Faire
Orders, inventory, reorders and messages for wholesale brands.
12 endpoints
Your AI agent books appointments from messages, finds free slots, covers a therapist's day off and finds clients who owe money or have sessions left. Sign in to Salonist once in your own Cloud Browser. No Expert plan, no developer.
11 tools Read and write
Salonist has no MCP server and no ChatGPT or Claude app. It lists API access only on its top Expert plan, and the public API docs cover mainly booking widget calls such as services, staff and free times (checked 8 Nov 2026). Cotlet runs 11 Salonist tools hosted, over MCP for agents and REST for scripts, in your own Salonist login on any plan.
| What you need | Salonist API | By hand | Cotlet |
|---|---|---|---|
| Services, staff and free times | Expert plan | Yes, one by one | Yes |
| Book or move a booking | Book only, Expert | Yes, one by one | Yes, after your OK |
| Clients, packages, what is owed | Not documented | Yes, one by one | Yes |
| Ask in ChatGPT or Claude | No | No | Yes |
| Developer needed | Yes | No | No |
Checked 8 Nov 2026. Sources: Salonist help: Does Salonist have an API for developers? · Salonist pricing · Salonist API docs
Once, in a browser we host for you.
One address in its settings.
It drafts the work, you OK what customers get.
We never keep your Salonist password, and no booking, move, bill or package goes through until you approve it. Who can see your session
Sign in to Salonist in a Cloud Browser. Create a Cotlet account, open Salonist in its Cloud Browser, sign in with your Salonist partner login on salonist.io and press Enable for agents.
Add the Cotlet address. Enter https://cotlet.dev/mcp/v1 as the MCP server or connector URL in your agent.
Let the agent in. Chat apps open a Cotlet sign-in page. Editors, n8n and scripts send an API key made in the console.
Salonist shares the address https://cotlet.dev/mcp/v1 with every other app you enable, so one connector covers them all. Turned Salonist on after connecting? Refresh the connector and the 11 tools appear.
Settings > Connectors > Add custom connector
URL: https://cotlet.dev/mcp/v1/connect
Claude Code:
claude mcp add --transport http cotlet \
https://cotlet.dev/mcp/v1 \
--header "Authorization: Bearer $COTLET_API_KEY" Settings > Apps & Connectors > Create
MCP server URL: https://cotlet.dev/mcp/v1/connect
Authentication: OAuth // ~/.cursor/mcp.json
{
"mcpServers": {
"cotlet": {
"url": "https://cotlet.dev/mcp/v1",
"headers": { "Authorization": "Bearer ${env:COTLET_API_KEY}" }
}
}
} # ~/.codex/config.toml
[mcp_servers.cotlet]
url = "https://cotlet.dev/mcp/v1"
bearer_token_env_var = "COTLET_API_KEY" MCP Client Tool (inside an AI Agent)
Transport: HTTP Streamable
URL: https://cotlet.dev/mcp/v1
Auth: Bearer, <your key>
Tool: salonist_read Make: MCP Client > Call a tool
Zapier: MCP Client by Zapier > Run Tool
Server URL: https://cotlet.dev/mcp/v1
Token: <your key>
Tool: salonist_write Free slots come from the calendar and blocked time. Bookings and moves wait for your OK; your notification settings decide what the client hears. Blocked time reaches no one, so it runs at once.
Returns appointments with client, service, staff member, start time and status, in calendar order, online bookings included.
MCP callsalonist_read → list_appointments
REST endpointGET https://cotlet.dev/api/v1/salonist/appointments
| Name | Type | Description |
|---|---|---|
| date_from string required | string | ISO date. |
| date_to string | string | ISO date. Default: date_from. |
| staff string | string | Staff member name. |
| page integer | integer | Page number. Default: 1. |
{
"date_from": "date from"
} {
"appointments": [
{
"appointment_id": "AP-55102",
"client": "Fatima Al Mansoori",
"service": "Hydrafacial",
"staff": "Rania",
"start": "2026-11-12T11:00",
"status": "Confirmed"
}
],
"page": 1
} Reads the calendar, blocked time included, and returns start times where the service fits.
MCP callsalonist_read → find_free_slots
REST endpointGET https://cotlet.dev/api/v1/salonist/free-slots/find
| Name | Type | Description |
|---|---|---|
| service string required | string | Service name as in your menu. |
| date string required | string | ISO date. |
| staff string | string | Staff member name. |
{
"service": "service",
"date": "date"
} {
"service": "Gel manicure",
"slots": [
{
"staff": "Joy",
"start": "2026-11-13T15:00"
},
{
"staff": "Rania",
"start": "2026-11-13T17:30"
}
]
} Creates the appointment on the calendar, the way New Booking does. Your Salonist notification settings decide whether the client gets a message. By default you confirm each call; you can switch that off for this tool.
MCP callsalonist_write → book_appointment
REST endpointPOST https://cotlet.dev/api/v1/salonist/clients/{client_id}/appointments
| Name | Type | Description |
|---|---|---|
| client_id string required | string | Client ID from list_clients. |
| service string required | string | Service name. |
| staff string required | string | Staff member name. |
| start string required | string | ISO date and time from find_free_slots. |
| note string | string | Booking note. |
{
"client_id": "CL-8853",
"service": "Gel manicure",
"staff": "Joy",
"start": "2026-11-13T15:00"
} {
"appointment_id": "AP-55160",
"client": "Layla Haddad",
"service": "Gel manicure",
"staff": "Joy",
"start": "2026-11-13T15:00",
"status": "Confirmed"
} Edits the appointment on the calendar. Your notification settings decide whether the client hears about it. By default you confirm each call; you can switch that off for this tool.
MCP callsalonist_write → reschedule_appointment
REST endpointPOST https://cotlet.dev/api/v1/salonist/appointments/{appointment_id}/reschedule
| Name | Type | Description |
|---|---|---|
| appointment_id string required | string | Appointment ID from list_appointments. |
| start string required | string | New ISO date and time. |
| staff string | string | New staff member. Default: unchanged. |
{
"appointment_id": "appointment_8c41d2",
"start": "start"
} {
"appointment_id": "AP-55102",
"start": "2026-11-14T12:00",
"staff": "Rania",
"status": "Confirmed"
} Adds blocked time, for example a break or training, so no one books into it. Reaches no client, so it runs at once.
MCP callsalonist_write → block_time
REST endpointPOST https://cotlet.dev/api/v1/salonist/time/block
| Name | Type | Description |
|---|---|---|
| staff string required | string | Staff member name. |
| from string required | string | ISO date and time. |
| to string required | string | ISO date and time. |
| reason string | string | Reason shown on the calendar. |
{
"staff": "staff",
"from": "from",
"to": "to"
} {
"staff": "Joy",
"from": "2026-11-15T13:00",
"to": "2026-11-15T14:00",
"reason": "Training"
} Search matches name, phone and email, so a returning client is found before a duplicate is made. Outstanding payments and package sessions come with each client.
Returns clients with ID, contact details, last visit and outstanding balance.
MCP callsalonist_read → list_clients
REST endpointGET https://cotlet.dev/api/v1/salonist/clients
| Name | Type | Description |
|---|---|---|
| query string | string | Name, phone or email. |
| not_visited_days integer | integer | Only clients with no visit in this many days. |
| with_outstanding boolean | boolean | Only clients who owe money. |
| page integer | integer | Page number. Default: 1. |
{
"clients": [
{
"client_id": "CL-8841",
"name": "Fatima Al Mansoori",
"phone": "+971 50 555 0142",
"last_visit": "2026-10-21",
"outstanding": "0.00"
}
],
"page": 1
} Returns the client record: contact details, notes, past services, active packages with sessions left, and what they owe.
MCP callsalonist_read → get_client
REST endpointGET https://cotlet.dev/api/v1/salonist/clients/{client_id}
| Name | Type | Description |
|---|---|---|
| client_id string required | string | Client ID from list_clients. |
{
"client_id": "client_8c41d2"
} {
"client_id": "CL-8841",
"name": "Fatima Al Mansoori",
"packages": [
{
"name": "Hydrafacial x6",
"sessions_left": 3
}
],
"outstanding": "0.00",
"history": [
{
"service": "Hydrafacial",
"staff": "Rania",
"date": "2026-10-21"
}
]
} Creates the client record. Search list_clients first so a returning client does not become a duplicate. Reaches no one, so it runs at once.
MCP callsalonist_write → create_client
REST endpointPOST https://cotlet.dev/api/v1/salonist/clients
| Name | Type | Description |
|---|---|---|
| name string required | string | Full name. |
| phone string | string | Mobile number. |
| email string | string | Email. |
{
"name": "Jane Doe"
} {
"client_id": "CL-8907",
"name": "Sara Khan",
"phone": "+971 55 555 0199"
} Bills and packages wait for your OK. Taking the payment stays with your front desk.
Generates the invoice for the services done, the way the calendar does after an appointment. Taking the payment stays with your front desk. By default you confirm each call; you can switch that off for this tool.
MCP callsalonist_write → create_bill
REST endpointPOST https://cotlet.dev/api/v1/salonist/appointments/{appointment_id}/bills
| Name | Type | Description |
|---|---|---|
| appointment_id string required | string | Appointment ID from list_appointments. |
| products array | array | Retail products sold with the visit. |
{
"appointment_id": "appointment_8c41d2"
} {
"bill_id": "B-30418",
"client": "Fatima Al Mansoori",
"total": "650.00",
"currency": "AED",
"status": "Unpaid"
} Adds the package from your package list to the client, ready to bill at the front desk. By default you confirm each call; you can switch that off for this tool.
MCP callsalonist_write → assign_package
REST endpointPOST https://cotlet.dev/api/v1/salonist/clients/{client_id}/package/assign
| Name | Type | Description |
|---|---|---|
| client_id string required | string | Client ID from list_clients. |
| package string required | string | Package name as in your list. |
{
"client_id": "client_8c41d2",
"package": "package"
} {
"client_id": "CL-8907",
"package": "Laser hair removal x8",
"status": "Assigned"
} Returns services by category with duration and price, so the agent books the exact service name.
MCP callsalonist_read → list_services
REST endpointGET https://cotlet.dev/api/v1/salonist/services
| Name | Type | Description |
|---|---|---|
| category string | string | Service category. |
{
"services": [
{
"name": "Gel manicure",
"category": "Nails",
"duration_min": 45,
"price": "120.00"
}
]
} Your signed-in Salonist profile, AES-256-GCM encrypted, in Finland. No password.
The 11 Salonist tools, never the session cookie.
What your login sees: calendar, clients, bills, packages, services.
Taking payments, refunds, payroll, marketing sends, deletes.
You sign in again yourself, in the same Cloud Browser.
Disable for agents, reset the browser, or change your Salonist password.
Cotlet never types your password: you sign in yourself, and the agent only uses the session. Our site scores A+ on Qualys SSL Labs, securityheaders.com and Mozilla Observatory (live results).
When Salonist moves a button on the calendar or renames a billing screen, we fix the tool and your agent calls it the same way. status.cotlet.dev checks the site, console and API every 3 minutes.
| Action | Undo |
|---|---|
| Book an appointment | Yes, cancel it |
| Move an appointment | Move it back; a message already sent stays sent |
| Create a bill or assign a package | Yes, void it in Salonist before payment |
| Add a client or blocked time | Yes, edit it in Salonist |
4 of 11 tools ask first: book_appointment, reschedule_appointment, create_bill, assign_package. New clients and blocked time reach no customer, so they run at once. You can turn the wait off per tool once you trust a routine.
{
"name": "book_appointment",
"arguments": {
"client_id": "CL-8853",
"service": "Gel manicure",
"staff": "Joy",
"start": "2026-11-13T15:00"
}
} curl -X POST https://cotlet.dev/api/v1/salonist/clients/CL-8853/appointments \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"service":"Gel manicure","staff":"Joy","start":"2026-11-13T15:00"}' {
"appointment_id": "AP-55160",
"client": "Layla Haddad",
"service": "Gel manicure",
"staff": "Joy",
"start": "2026-11-13T15:00",
"status": "Confirmed"
} A cron job or n8n flow can call the same tools over REST at /api/v1/salonist with the same key and price, in JSON. Failed calls are free. Each tool row above shows its REST path.
About $54 a monthfor a beauty studio with 6 therapists, 9,370 credits. Your Salonist plan stays as it is.
| Job | Calls | Credits |
|---|---|---|
| Booking from a message | 3 × 150 | 4,500 |
| Appointment moved | 3 × 45 | 1,350 |
| Bills for finished visits, daily | 5 × 26 | 1,300 |
| Outstanding payments, weekly | 8 × 4 | 320 |
| Unused package sessions, weekly | 10 × 4 | 400 |
| Cloud Browser, 30 days | 1,500 | |
| Total | 9,370 |
Salonist publishes no booking counts, so the month is our example. Dollars at the $29 pack rate.
| Credits | Price, one time | Calls at 10 credits | Per 1,000 credits |
|---|---|---|---|
| 5,000 | $29 | 500 | $5.80 |
| 15,000 | $79 | 1,500 | $5.27 |
| 32,000 | $149 | 3,200 | $4.66 |
| 60,000 | $249 | 6,000 | $4.15 |
Only successful calls use credits; failed calls and timeouts cost nothing. At a balance of 0 calls pause, never a surprise charge. Authenticate with the Authorization: Bearer header.
| Option | What it does | Where it stops |
|---|---|---|
| Salonist API | Booking widget calls for your own developer. | Expert plan only; little beyond services, staff and bookings. |
| Salonist AI receptionist | Salonist's own add-on that answers clients on WhatsApp. | Works inside Salonist; not your ChatGPT or Claude. |
| By hand | Every screen of Salonist, one booking at a time. | Your front desk's time. |
If you are on Expert and have a developer, the API is enough for a booking widget. To book, reschedule and follow up from ChatGPT or Claude this week, Cotlet works in the Salonist account you already have.
Take Group sp. z o.o. runs Cotlet. It is a software company registered in Poland, EU (VAT PL6342984273), in business since 2019, led by its founders Bart Krawczyk (Co-founder, CTO) and Jake Slugocki (Co-founder, SEO, sales and marketing). Questions about the Salonist tools go to contact@cotlet.dev.
Sign up free at https://cotlet.dev, open Salonist under Integrations in the console and sign in to Salonist in its Cloud Browser. The trial starts with your first app and asks for no card.
Sign up at cotlet.dev, log in to Salonist once in its Cloud Browser and add Cotlet to ChatGPT or Claude, following the steps in your console. No API key is needed. ChatGPT and Claude then work in your Salonist account through Cotlet, in their phone apps too.
With Cotlet, ChatGPT, Claude and other AI agents handle jobs like these in Salonist: book appointments from WhatsApp messages; cover a staff member's day off; chase outstanding payments. You ask in plain words, and anything that reaches other people waits for your OK first.
No. Salonist has no ChatGPT or Claude connector of its own and Salonist has no official MCP server (checked 8 Nov 2026). Cotlet is an independent one that works in ChatGPT, Claude, Cursor and any MCP client, on your signed-in account.
Yes, with Cotlet. ChatGPT finds the client, checks free slots for the service and books it with the staff member you name. Booking waits for your OK by default.
Yes, with Cotlet. ChatGPT moves appointments to a new time or another staff member, for example when someone is off, after your OK.
Yes, with Cotlet. ChatGPT lists clients with outstanding payments or unused package sessions, with their last visit, so your front desk knows whom to call.
No. Cotlet works through your own Salonist login on any plan, so you do not need Expert plan API access or a developer. It can do what your login can do in Salonist.
Yes. The receptionist answers clients inside Salonist; Cotlet lets ChatGPT or Claude work in the same account. A booking it makes shows up for your agent like any other.
Only in how it is called. Both carry the same 11 tools, inputs, answers, API key and price. Agents use MCP; scripts and HTTP steps use REST.
No. Cotlet is independent and not affiliated with Salonist.
Free 7-day trial with 2,000 credits, no card needed.
May we use Google Analytics to see which pages help people? It sets cookies only if you accept. No ads, and we never sell data. Cookie policy