Local services & SaaS
Faire
Orders, inventory, reorders and messages for wholesale brands.
12 endpoints
Appointments, customers, waiting list and sales for your Salonized salon. Use it in ChatGPT, Claude or any AI agent over MCP, or in n8n, Make and scripts over REST.
12 tools Read and write
Salonized has no public API, no webhooks and no MCP server (checked 31 Oct 2026). Its help center has no article on any of them. Cotlet runs 12 Salonized tools hosted, over MCP for agents and REST for scripts.
| What you need | Calendar sync | Your own script | Cotlet |
|---|---|---|---|
| Read appointments | Into Google or Apple calendar | If you write it | Yes, any range |
| Book an appointment | No | Widget endpoints only | Yes, after your OK |
| Customer notes and no-shows | No | If you write it | Yes |
| Waiting list and sales totals | No | If you write it | Yes, Basic plan and up |
| Clear in the terms | Yes, official | Unclear | Uses the web app, see Terms |
Checked 31 Oct 2026. Sources: Salonized help center: search results for "api" · Salonized public-api wiki: Bookings API (2018) · Salonized help: Reports explained · Salonized pricing
Use your own account in its Cotlet Cloud Browser.
Connect your agent or create a Cotlet API key.
Ask your agent or send an HTTP request.
We never keep your Salonized password, and nothing that reaches a customer happens until you approve it. Who can see your session
Use MCP with your AI agent, or HTTP requests in n8n, Make, Zapier and scripts. Follow the MCP setup below or jump to the REST guide.
Enable Salonized for agents. Sign up, log in to Salonized in its Cloud Browser, then press Enable for agents.
Add the Cotlet address. Add https://cotlet.dev/mcp/v1 as an MCP server or connector in your agent.
Approve the connection. Chat apps ask you to sign in to Cotlet. Editors, n8n and scripts use an API key from the console.
One shared address, https://cotlet.dev/mcp/v1, also carries Salonized next to your other apps. If you enable Salonized after connecting, refresh the connector so the new tools show up.
Settings > Connectors > Add custom connector
URL: https://cotlet.dev/mcp/v1/connect
Claude Code:
claude mcp add --transport http cotlet-salonized \
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-salonized": {
"url": "https://cotlet.dev/mcp/v1",
"headers": { "Authorization": "Bearer ${env:COTLET_API_KEY}" }
}
}
} # ~/.codex/config.toml
[mcp_servers.cotlet-salonized]
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: salonized_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: salonized_write Create a Cotlet API key with access to Salonized and its read operations. Store it as COTLET_API_KEY in your environment or automation platform's credential store.
Connect Salonized in Cotlet and enable it for agents. Account access: Your own Salonized login (the calendar, customers and Reports menus must be visible to that user; reports and the waiting list need the Basic plan or higher).
curl "https://cotlet.dev/api/v1/salonized/appointments?from=2026-11-05&to=2026-11-06" \
-H "Authorization: Bearer $COTLET_API_KEY" A successful REST call puts the tool output in result. This illustrative response excerpt omits call IDs, messages and credit details.
{
"status": "success",
"app": "salonized",
"tool": "list_appointments",
"result": {
"appointments": [
{
"appointment_id": "48213907",
"start": "2026-11-05T10:00",
"customer": {
"customer_id": "9120345",
"name": "Sanne de Vries"
},
"services": [
{
"name": "Cut and finish",
"price": 45
}
],
"employee": "Eva Bakker",
"no_show": false
}
]
}
} Returns each appointment in the date range with customer, services with price, employee and no-show flag, ordered by start time.
Absences and breaks are not appointments and are not returned.
Replace the dates with your own range; add employee to read one person's calendar.
Keep the appointment ID in your workflow so a later run updates the same record.
| Tool | Connect through | Example workflow |
|---|---|---|
| n8n | HTTP Request | Read tomorrow's appointments with list_appointments and post them to a team channel every evening. |
| Make | HTTP > Make a request | Read the Totals of a week with get_sales_report and add them to a bookkeeping sheet. |
| Python or Node.js | REST API | Read list_waiting_list for a day and compare it with list_appointments to find gaps for your review. |
Send Authorization: Bearer <your Cotlet API key> in request headers. You configure the schedule, destination and record comparisons.
Cotlet reads Salonized; your workflow steps write to your chosen destination. These HTTP workflows do not require a native Cotlet connector or a prebuilt template.
Python and Node.js can use the same HTTP requests without an AI agent. Keep access keys in credentials, outside shared workflow exports.
The API and MCP reference lists operations and inputs. The REST API guide explains authentication, errors and approvals.
Reads the calendar as you see it. Absences and breaks are not appointments.
Returns each appointment with its ID, start time, customer, services with price, employee and whether it is marked as a no-show, ordered by start time. Absences and breaks are not appointments and are left out. Locations follow the location you work in.
MCP callsalonized_read → list_appointments
REST endpointGET https://cotlet.dev/api/v1/salonized/appointments
| Name | Type | Description |
|---|---|---|
| from string required | string | First day, YYYY-MM-DD. |
| to string required | string | Last day, YYYY-MM-DD. |
| employee string | string | Employee name, as shown in the calendar. Omit for everyone. |
{
"from": "from",
"to": "to"
} {
"appointments": [
{
"appointment_id": "48213907",
"start": "2026-11-05T10:00",
"customer": {
"customer_id": "9120345",
"name": "Sanne de Vries"
},
"services": [
{
"name": "Cut and finish",
"price": 45
}
],
"employee": "Eva Bakker",
"no_show": false
}
]
} Returns the services in order, the employee, the appointment total and the appointment note, which the customer does not see. Use it to read the colour formula left on the last visit.
MCP callsalonized_read → get_appointment
REST endpointGET https://cotlet.dev/api/v1/salonized/appointments/{appointment_id}
| Name | Type | Description |
|---|---|---|
| appointment_id string required | string | Appointment ID from list_appointments. |
{
"appointment_id": "appointment_8c41d2"
} {
"appointment_id": "48213907",
"start": "2026-11-05T10:00",
"customer": {
"customer_id": "9120345",
"name": "Sanne de Vries"
},
"services": [
{
"name": "Cut and finish",
"price": 45
}
],
"employee": "Eva Bakker",
"note": "Toner 8.1, 20 minutes",
"total": 45,
"no_show": false
} Returns each service as the appointment form lists it, with its name and price. The agent uses the names when it books. Services you cannot see in the form are not returned.
MCP callsalonized_read → list_services
REST endpointGET https://cotlet.dev/api/v1/salonized/services
No parameters.
{
"services": [
{
"name": "Cut and finish",
"price": 45
},
{
"name": "Colour",
"price": 65
}
]
} Creates the appointment as the calendar form does and returns its ID and total. Salonized does not stop an overlap, so the agent checks list_appointments first. With send_email_notifications on, the customer gets the confirmation email. By default you confirm each call; you can switch that off for this tool.
MCP callsalonized_write → create_appointment
REST endpointPOST https://cotlet.dev/api/v1/salonized/customers/{customer_id}/appointments
| Name | Type | Description |
|---|---|---|
| customer_id string required | string | Customer ID from find_customer. |
| services string[] required | string[] | Service names from list_services, in the order they are done. |
| start string required | string | Start time, YYYY-MM-DDTHH:MM. |
| employee string | string | Employee name. Required when the salon has more than one. |
| note string | string | Appointment note. The customer does not see it. |
| send_email_notifications boolean | boolean | Mirrors the Send email notifications box of the appointment form. False by default: the customer gets no confirmation. |
{
"customer_id": "9120345",
"services": [
"Cut and finish"
],
"start": "2026-11-05T10:00",
"employee": "Eva Bakker",
"send_email_notifications": false
} {
"appointment_id": "48213907",
"start": "2026-11-05T10:00",
"customer_id": "9120345",
"services": [
{
"name": "Cut and finish",
"price": 45
}
],
"employee": "Eva Bakker",
"total": 45,
"email_sent": false
} Ticks no-show on the appointment, as the Edit button does. The appointment shows a cross in the calendar and the customer profile counts it. If you set up the automatic email after a no-show in Salonized, that email goes out. By default you confirm each call; you can switch that off for this tool.
MCP callsalonized_write → mark_no_show
REST endpointPOST https://cotlet.dev/api/v1/salonized/appointments/{appointment_id}/no-show/mark
| Name | Type | Description |
|---|---|---|
| appointment_id string required | string | Appointment ID from list_appointments. |
{
"appointment_id": "appointment_8c41d2"
} {
"appointment_id": "48213907",
"no_show": true,
"customer_no_shows": 1
} Notes can carry a follow-up date that shows in the calendar. Archived customers are not searched.
Returns matching customers with contact details and the number of no-shows. With several matches it returns all of them, so the agent asks which one you mean. Archived customers are not searched.
MCP callsalonized_read → find_customer
REST endpointGET https://cotlet.dev/api/v1/salonized/customers/find
| Name | Type | Description |
|---|---|---|
| query string required | string | Part of the name, email address or mobile number. |
{
"query": "query"
} {
"customers": [
{
"customer_id": "9120345",
"name": "Sanne de Vries",
"email": "sanne@example.com",
"mobile": "+31 6 12345678",
"no_shows": 0
}
]
} Returns the notes on the profile with their follow-up dates and whether each is checked off, the appointments listed on the Appointments tab and the no-show count. Notes with a follow-up date also show in the calendar.
MCP callsalonized_read → get_customer
REST endpointGET https://cotlet.dev/api/v1/salonized/customers/{customer_id}
| Name | Type | Description |
|---|---|---|
| customer_id string required | string | Customer ID from find_customer. |
{
"customer_id": "customer_8c41d2"
} {
"customer_id": "9120345",
"name": "Sanne de Vries",
"notes": [
{
"text": "Colour 7.3, 6% developer, 35 minutes",
"follow_up": "2026-12-17",
"done": false
}
],
"no_shows": 0,
"appointments": [
{
"appointment_id": "48213907",
"start": "2026-11-05T10:00",
"services": [
"Cut and finish"
]
}
]
} Creates the profile with first and last name, the only required fields in Salonized. The call sends nothing to the customer and can be undone by archiving the customer, so it does not ask first. The agent searches with find_customer before it adds anyone.
MCP callsalonized_write → add_customer
REST endpointPOST https://cotlet.dev/api/v1/salonized/customers
| Name | Type | Description |
|---|---|---|
| first_name string required | string | First name. |
| last_name string required | string | Last name. |
| email string | string | Email address. |
| mobile string | string | Mobile number. |
{
"first_name": "first name",
"last_name": "last name"
} {
"customer_id": "9120377",
"name": "Lotte Smit",
"email": "lotte@example.com"
} Adds one more note; earlier notes stay. A note with a follow-up date appears in the calendar. Nobody is contacted, and the note can be deleted in the profile, so it does not ask first.
MCP callsalonized_write → add_customer_note
REST endpointPOST https://cotlet.dev/api/v1/salonized/customers/{customer_id}/note
| Name | Type | Description |
|---|---|---|
| customer_id string required | string | Customer ID from find_customer. |
| text string required | string | The note. |
| follow_up string | string | Follow-up date, YYYY-MM-DD. The note then shows in the calendar until checked off. |
{
"customer_id": "customer_8c41d2",
"text": "text"
} {
"customer_id": "9120345",
"note_id": "7731",
"text": "Colour 7.3, 6% developer, 35 minutes",
"follow_up": "2026-12-17"
} The waiting list needs Basic or Pro. The sales report reads the Totals tab of Reports.
Returns each sign-up with the customer, services, staff preference, time frame (morning, afternoon or evening) and note. Needs the waiting list switched on, which is part of the Basic and Pro plans.
MCP callsalonized_read → list_waiting_list
REST endpointGET https://cotlet.dev/api/v1/salonized/waiting-lists
| Name | Type | Description |
|---|---|---|
| date string required | string | Day, YYYY-MM-DD. |
{
"date": "date"
} {
"date": "2026-11-05",
"signups": [
{
"customer": "Mark Jansen",
"services": [
"Cut and finish"
],
"staff_preference": "Eva Bakker",
"timeframe": "afternoon",
"note": "Any time after 15:00"
}
]
} Adds the entry the Waiting List page shows under New Registration. The customer is not contacted by this call, and you can remove the entry in Salonized, so it does not ask first. Needs the waiting list switched on.
MCP callsalonized_write → add_to_waiting_list
REST endpointPOST https://cotlet.dev/api/v1/salonized/customers/{customer_id}/waiting-lists
| Name | Type | Description |
|---|---|---|
| customer_id string required | string | Customer ID from find_customer. |
| services string[] required | string[] | Service names from list_services. |
| date string required | string | Day, YYYY-MM-DD. |
| employee string | string | Staff preference. |
| timeframe string | string | morning, afternoon or evening. |
| note string | string | Note, visible to staff only. |
{
"customer_id": "customer_8c41d2",
"services": [
"services"
],
"date": "date"
} {
"customer_id": "9120377",
"date": "2026-11-05",
"services": [
"Cut and finish"
],
"timeframe": "afternoon"
} Returns total revenue with and without VAT, split into products and services, gift card sales, discounts given, payment methods, the number of invoices and appointments and the number of new customers. Needs the Basic plan or higher. Daily totals can differ from the day view.
MCP callsalonized_read → get_sales_report
REST endpointGET https://cotlet.dev/api/v1/salonized/sales-report
| Name | Type | Description |
|---|---|---|
| from string required | string | First day, YYYY-MM-DD. |
| to string required | string | Last day, YYYY-MM-DD. |
{
"from": "from",
"to": "to"
} {
"from": "2026-10-26",
"to": "2026-11-01",
"revenue_incl_vat": 3025,
"revenue_excl_vat": 2500,
"services": 2200,
"products": 300,
"invoices": 58,
"appointments": 62,
"new_customers": 7
} Your logged-in Salonized profile, encrypted with AES-256-GCM, in Finland. Not the password.
The 12 Salonized tools. Never the cookie.
Your salon: calendar, customer files, waiting list, reports.
Checkout, payments, plan, password and deleting.
You sign in yourself in the Cloud Browser. We never type a code for you.
Disable for agents, reset the browser, or change your Salonized password.
Our site scores A+ on Qualys SSL Labs, securityheaders.com and Mozilla Observatory (live results). There is no SOC 2 report or third-party pentest yet.
"The Customer is obliged to use the Services within the limits of the provisions of the Agreement and these General Terms and Conditions, as well as the applicable statutory regulations."
The terms page on salonized.com shows no text today (checked 31 Oct 2026), so this is the last copy we could read. It has no clause on bots, scraping or automated access, and we found no public case of a Salonized account closed for automation. Salonized is owned by Treatwell, and its terms may have changed since 2021. Cotlet works through the Salonized web app, and Salonized could still read it as automation.
Your salon data includes your customers' personal data. Salonized offers a data processing agreement; check that it covers a tool you let act in your account.
When Salonized moves a button or renames a field, the fix happens on our side and your prompts keep working. status.cotlet.dev watches the site, console and API every 3 minutes.
| Action | Undo |
|---|---|
| Book an appointment | Delete it in the calendar; a confirmation email already sent stays sent |
| Mark a no-show | Untick no-show in Edit; an automatic email already sent stays sent |
| Add a customer note | Delete the note in the profile |
| Add a customer | Archive the customer |
| Add to the waiting list | Remove the entry on the Waiting List page |
2 of 12 tools ask first: create_appointment and mark_no_show, the two that can email a customer. Notes, new customers and waiting list entries reach nobody, so they run at once. Switch the wait off per tool for a scheduled run.
create_appointment sends no email unless you set send_email_notifications.
{
"name": "create_appointment",
"arguments": {
"customer_id": "9120345",
"services": [
"Cut and finish"
],
"start": "2026-11-05T10:00",
"employee": "Eva Bakker",
"send_email_notifications": false
}
} curl -X POST https://cotlet.dev/api/v1/salonized/customers/9120345/appointments \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"services":["Cut and finish"],"start":"2026-11-05T10:00","employee":"Eva Bakker","send_email_notifications":false}' {
"appointment_id": "48213907",
"start": "2026-11-05T10:00",
"customer_id": "9120345",
"services": [
{
"name": "Cut and finish",
"price": 45
}
],
"employee": "Eva Bakker",
"total": 45,
"email_sent": false
} Scripts and cron jobs reach the same tools over REST at /api/v1/salonized, with the same key and price. A failed call costs nothing. The tools table lists the REST path of each tool.
About $47 a monthfor a small salon with 3 employees, 8,140 credits. Your Salonized plan is billed by Salonized as before.
| Job | Calls | Credits |
|---|---|---|
| Book an appointment by chat | 3 × 120 | 3,600 |
| List tomorrow's appointments, daily | 1 × 30 | 300 |
| Match the waiting list to gaps | 3 × 30 | 900 |
| Save a customer note | 2 × 60 | 1,200 |
| Log a no-show | 3 × 20 | 600 |
| Weekly sales totals | 1 × 4 | 40 |
| Cloud Browser, 30 days | 1,500 | |
| Total | 8,140 |
The month is our example: 3 employees, about 20 appointments a day, 120 chat bookings. Salonized publishes no typical account size. 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 |
|---|---|---|
| SabbeRubbish/gatsby-source-salonized | Pulls Salonized data into a Gatsby site with a cookie login. | Not an MCP server, 2 stars, last commit 11 Mar 2021. |
| Salonized public-api wiki | Lists the booking widget endpoints, last edited July 2018. | Booking widget only; the repository is empty. |
| Zapier, Make, n8n | No Salonized app found on Zapier or n8n; the Make page was not reachable. | Nothing to call from a workflow. |
| Data export and CSV import | Salonized's own Settings > Data export and customer import. | By hand, one period at a time, no booking. |
There is no Salonized MCP server on GitHub and no hosted one besides ours. Doing it by hand needs no setup and costs your time. Switching software costs a migration. Cotlet keeps your Salonized account and lets an agent do the booking, notes and reporting chores.
Take Group sp. z o.o. runs Cotlet. It is a software company registered in Poland, EU (VAT PL6342984273), working since 2019, founded by Bart Krawczyk (Co-founder, CTO) and Jake Slugocki (Co-founder, SEO, sales and marketing). Write to contact@cotlet.dev with questions about the Salonized tools.
Create a free account at https://cotlet.dev, open Salonized under Integrations in the console and log in to Salonized in its Cloud Browser. The trial starts with your first app, no card asked.
Sign up at cotlet.dev, log in to Salonized 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 Salonized account through Cotlet, in their phone apps too.
With Cotlet, ChatGPT, Claude and other AI agents handle jobs like these in Salonized: book salon appointments with AI; send tomorrow\; fill open slots from the waiting list. You ask in plain words, and anything that reaches other people waits for your OK first.
Cotlet acts as the signed-in user and sees what that user sees. Salonized's trial gives 14 days of Pro features; after that Appointments covers calendar and customers. The waiting list and the Reports page need Basic or higher (Salonized help center, checked 31 Oct 2026).
Only if you ask. create_appointment takes send_email_notifications, off by default, which mirrors the box next to Save in the appointment form. mark_no_show can trigger the automatic no-show email if you set one up in Salonized. You confirm both by default.
Not yet. The tools cover reading, booking, notes, no-shows and the waiting list. Moving, cancelling, checkout, payments, products, newsletters and deleting customers are not included.
Not that we found. The help center has no article on them, so nothing tells an agent about a new booking. Run your agent on a schedule instead, for example a daily list_appointments pass.
Only the door is different. Both expose the same 12 tools, inputs and answers, with one API key and one price. Agents use MCP; scripts and HTTP steps use REST.
No. Cotlet is independent and not affiliated with Salonized or Treatwell.
Yes. Call Cotlet's REST API from a script or an HTTP step in n8n, Make or Zapier with your Cotlet key. MCP is the alternative for AI agents; you do not need to connect an agent to use REST.
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