Local services & SaaS
Mangomint
Appointments, clients and sales for your Mangomint salon or spa.
13 endpoints
Zenoti's API is open only to businesses with the API package, set up through their Customer Success Manager, and there is no Zenoti MCP server (checked 13 Nov 2026). Cotlet runs a hosted Zenoti MCP server with 20 tools that ChatGPT, Claude and your scripts use from your own employee login. Replies, reviews, broadcasts and bookings wait for your OK.
20 tools Read and write
Zenoti documents a REST API and webhooks at docs.zenoti.com, covering centers, guests, appointments, employees and memberships. To use it, a business asks its Zenoti Customer Success Manager to enable the API package, then creates a backend app with an App ID, App Secret and API Key. No Zenoti MCP server or official ChatGPT or Claude connector was verified.
| What you need | Zenoti API | Zeenie / AI Advisor | Cotlet |
|---|---|---|---|
| Ask ChatGPT or Claude to do the work | No MCP server verified | Zenoti's own assistants | Hosted MCP server |
| Start without the vendor | API package through your CSM | Activation or add-on | Your login, once |
| Inbox, reviews and HyperConnect reports | Not in the API index | Answers questions | 20 tools, writes after your OK |
| Run from n8n or a script | After setup, your own code | Inside Zenoti only | REST, same key |
Checked 13 Nov 2026. Sources: Zenoti API: custom sources and API Key · Zenoti Webhooks overview · Zenoti API docs index · Help: AI Business Advisor · Help: Zeenie · Help: Appointments · Help: Queue · Help: Fitness · Help: Loyalty · Help: Messaging and Engagement Tools · Help: HyperConnect · Help: Reports in HyperConnect · Help: Guest Summary in HyperConnect · Help: Manage Social Reviews · Help: SmartBot · Help: Marketing · Help: Point of Sale · Help: Inventory · Help: Employee and payroll · Help: Zenoti Driven Growth dashboard · Help: Kiosk
Once, in a browser we host for you.
One address in its settings.
It drafts each reply, you approve it.
Your agent works in your own signed-in Cloud Browser. Anything a guest sees, from a text reply to a review response, waits for your OK. Who can see your session
Sign in to Zenoti in a Cloud Browser. Open Zenoti in your Cotlet Cloud Browser and sign in with your own employee login.
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.
Zenoti shares https://cotlet.dev/mcp/v1 with every app you turn on in Cotlet, so one connector reaches all of them. Turned Zenoti on after connecting? A connector refresh brings in its 20 tools.
Settings > Apps & Connectors > Create
MCP server URL: https://cotlet.dev/mcp/v1/connect
Authentication: OAuth 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" // ~/.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: zenoti_read One tool per Zenoti Help hub. Read tools run at once. Write tools take an `action`; `list` and `get` only read, the rest change Zenoti and ask first.
The Appointment Book, walk-ins in the Queue, fitness classes and the kiosk.
The same day the front desk opens in the Appointment Book. Nothing is changed.
MCP callzenoti_read → view_appointment_book
REST endpointGET https://cotlet.dev/api/v1/zenoti/appointment-books/view
| Name | Type | Description |
|---|---|---|
| center string | string | Center name. Leave empty for the center your login opens. |
| date string required | string | ISO date. |
| employee string | string | One provider only. |
{
"date": "date"
} {
"center": "Downtown",
"date": "2026-11-16",
"appointments": [
{
"time": "10:00",
"guest": "Example Guest",
"service": "Signature Facial",
"provider": "Provider A",
"status": "Confirmed"
},
{
"time": "11:30",
"guest": "Sample Guest",
"service": "Gel Manicure",
"provider": "Provider B",
"status": "Booked"
}
]
} Guests receive whatever booking and change messages your Zenoti settings send, so each change waits for your OK. By default you confirm each call; you can switch that off for this tool.
MCP callzenoti_write → manage_appointments
REST endpointPOST https://cotlet.dev/api/v1/zenoti/appointments/manage
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `book`, `reschedule`, `cancel`. Every action writes. |
| center string | string | Center name. Leave empty for the center your login opens. |
| appointment_id string | string | For `reschedule` and `cancel`. |
| guest string | string | For `book`. |
| service string | string | For `book`. |
| employee string | string | Provider, if the guest asked for one. |
| start string | string | ISO date and time. |
{
"action": "reschedule",
"center": "Downtown",
"appointment_id": "apt_88213",
"start": "2026-11-21T11:00"
} {
"appointment_id": "apt_88213",
"guest": "Example Guest",
"service": "Signature Facial",
"employee": "Provider A",
"start": "2026-11-18T14:00",
"status": "Booked"
} For businesses that run Zenoti's Queue. A payment link lets the guest pay the invoice from their phone. By default you confirm each call; you can switch that off for this tool.
MCP callzenoti_write → manage_queue
REST endpointPOST https://cotlet.dev/api/v1/zenoti/queue/manage
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `list`, `add_guest`, `edit_visit`, `send_payment_link`. `list` only reads. |
| center string | string | Center name. Leave empty for the center your login opens. |
| guest string | string | Guest name or phone. |
| service string | string | For `add_guest`. |
{
"action": "action"
} {
"center": "Downtown",
"waiting": [
{
"guest": "Walk-in A",
"service": "Haircut",
"wait_minutes": 15
}
],
"added": "Walk-in A"
} For fitness businesses: sessions, attendance, rosters and guest passes, also shown on the HyperConnect timeline. By default you confirm each call; you can switch that off for this tool.
MCP callzenoti_write → manage_classes
REST endpointPOST https://cotlet.dev/api/v1/zenoti/classes/manage
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `list`, `schedule`, `check_in`. `list` only reads. |
| center string | string | Center name. Leave empty for the center your login opens. |
| class string | string | Class or workshop name. |
| start string | string | ISO date and time. |
| guests array | array | For `check_in`. |
{
"action": "action"
} {
"center": "Studio North",
"class": "Morning Pilates",
"start": "2026-11-17T07:00",
"booked": 14,
"capacity": 16
} Zenoti runs an existing kiosk, planned for retirement in July 2026, and a new kiosk on ZMA. Changes show on the guest-facing screen. By default you confirm each call; you can switch that off for this tool.
MCP callzenoti_write → configure_kiosk
REST endpointPOST https://cotlet.dev/api/v1/zenoti/kiosk/configure
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `get`, `update`. `get` only reads. |
| center string | string | Center name. Leave empty for the center your login opens. |
| settings object | object | Guest actions, wait times, display and theme settings. |
{
"action": "action"
} {
"center": "Downtown",
"kiosk": "New Kiosk on ZMA",
"guest_actions": [
"Check in",
"Book"
],
"saved": true
} Guest profiles, HyperConnect guest summaries and loyalty points.
Insights cover history and engagement, such as a credit balance. Suggestions recommend a next step, such as fixing an invalid email. Alerts list missing details such as birthday or preferred communication method.
MCP callzenoti_read → get_guest_summary
REST endpointGET https://cotlet.dev/api/v1/zenoti/guest-summary
| Name | Type | Description |
|---|---|---|
| guest string required | string | Guest name or phone number. |
{
"guest": "guest"
} {
"guest": "Example Guest",
"insights": [
"$120 credit balance from a past membership"
],
"suggestions": [
"Email address is invalid; ask for a new one"
],
"alerts": [
"Birthday missing"
]
} Communication preferences decide which messages a guest may receive, in line with Zenoti's TCPA and GDPR settings. The agent shows you the change before saving. By default you confirm each call; you can switch that off for this tool.
MCP callzenoti_write → manage_guests
REST endpointPOST https://cotlet.dev/api/v1/zenoti/guests/manage
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `get`, `create`, `update`, `add_feedback`, `add_issue`. `list` and `get` only read. |
| guest string | string | Guest name or phone, for `get` and updates. |
| fields object | object | Contact details, labels, communication preferences, referral source. |
{
"action": "action"
} {
"guest": "Example Guest",
"email": "guest@example.com",
"labels": [
"VIP"
],
"preferences": {
"sms": true,
"email": true
},
"saved": true
} Works with regular or tiered loyalty programs as your business set them up. Redeeming spends the guest's points. By default you confirm each call; you can switch that off for this tool.
MCP callzenoti_write → manage_loyalty_points
REST endpointPOST https://cotlet.dev/api/v1/zenoti/loyalty-points/manage
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `get`, `redeem`. `get` only reads. |
| guest string required | string | Guest name or phone. |
| points number | number | For `redeem`. |
{
"action": "action",
"guest": "guest"
} {
"guest": "Example Guest",
"points": 1250,
"tier": "Gold",
"redeemed": 0
} The ezConnect inbox, SMS broadcasts, Google and Facebook reviews and SmartBot answers. Everything here reaches guests.
Replies reach the guest on the channel they wrote from, so each one waits for your OK. Private notes stay with your staff. By default you confirm each call; you can switch that off for this tool.
MCP callzenoti_write → manage_conversations
REST endpointPOST https://cotlet.dev/api/v1/zenoti/conversations/manage
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `list`, `get`, `reply`, `add_note`. `list` and `get` only read. |
| conversation string | string | Guest name or number. |
| message string | string | Reply text, or a saved response name. |
{
"action": "action"
} {
"conversation": "Sample Guest",
"channel": "SMS",
"last_message": "Can I move Friday to Saturday?",
"unread": 1
} Broadcasts reach many guests at once and follow Zenoti's rules on forbidden message categories in the US and Canada. The agent shows the audience size first. By default you confirm each call; you can switch that off for this tool.
MCP callzenoti_write → send_broadcast
REST endpointPOST https://cotlet.dev/api/v1/zenoti/broadcasts
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `list`, `send`. `list` only reads. |
| audience string | string | Guests with appointments on a date, or a target segment. |
| message string | string | Text of the broadcast. |
{
"action": "action"
} {
"broadcast": "Closed Thanksgiving Day",
"recipients": 214,
"delivered": 209
} A response is public under your business, so the agent shows the text before it posts. By default you confirm each call; you can switch that off for this tool.
MCP callzenoti_write → manage_reviews
REST endpointPOST https://cotlet.dev/api/v1/zenoti/reviews/manage
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `list`, `respond`. `list` only reads. |
| review string | string | For `respond`: the review. |
| response string | string | Your public reply. |
{
"action": "action"
} {
"reviews": [
{
"source": "Google",
"rating": 2,
"text": "Waited 20 minutes past my time.",
"responded": false
}
]
} Published answers are what SmartBot tells guests, so publishing waits for your OK. By default you confirm each call; you can switch that off for this tool.
MCP callzenoti_write → manage_smartbot_faqs
REST endpointPOST https://cotlet.dev/api/v1/zenoti/smartbot-faqs/manage
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `list`, `create`, `update`, `publish`. `list` only reads. |
| faq object | object | Question and answer. |
{
"action": "action"
} {
"faq": {
"question": "Do you take walk-ins?",
"answer": "Yes, at the Downtown center; check the queue wait time online."
},
"published": false
} POS invoices, campaigns and discounts, purchase orders and transfers.
The tool opens an invoice with the items and their owner; taking a card payment stays at your terminal. Returns, refunds and price overrides follow your POS rules and are not part of this tool. By default you confirm each call; you can switch that off for this tool.
MCP callzenoti_write → make_sale
REST endpointPOST https://cotlet.dev/api/v1/zenoti/sale/make
| Name | Type | Description |
|---|---|---|
| guest string required | string | Guest name or phone. |
| items array required | array | Services, products, membership, package, gift card or prepaid card. |
| center string | string | Center name. Leave empty for the center your login opens. |
{
"guest": "guest",
"items": "items"
} {
"invoice": "INV-30412",
"guest": "Example Guest",
"items": [
"Gift card $100"
],
"total": 100,
"status": "Open"
} Campaigns bundle an offer with a target segment and a channel. Launching one reaches guests, so the agent shows the offer and audience first. By default you confirm each call; you can switch that off for this tool.
MCP callzenoti_write → manage_marketing
REST endpointPOST https://cotlet.dev/api/v1/zenoti/marketing/manage
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `list`, `create_discount`, `create_campaign`, `create_segment`. `list` only reads. |
| details object | object | Name, offer, eligible services or products, dates, segment and channel (email, SMS or WhatsApp). |
{
"action": "action"
} {
"campaign": "Winter facial week",
"discount": "15% off facials",
"segment": "No visit in 90 days",
"channel": "Email",
"status": "Draft"
} A purchase order commits money to a supplier and a transfer moves stock between centers, so both wait for your OK. By default you confirm each call; you can switch that off for this tool.
MCP callzenoti_write → manage_inventory
REST endpointPOST https://cotlet.dev/api/v1/zenoti/inventory/manage
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `list`, `create_purchase_order`, `create_transfer`, `adjust_stock`. `list` only reads. |
| center string | string | Center name. Leave empty for the center your login opens. |
| items array | array | Product and quantity. |
| vendor string | string | For a purchase order. |
| reason string | string | For `adjust_stock`: one of your adjustment reasons. |
{
"action": "action"
} {
"center": "Downtown",
"purchase_order": "PO-1188",
"vendor": "Example Beauty Supply",
"lines": 6,
"total": 1460,
"status": "Draft"
} Schedules and block-out time, reports, HyperConnect analytics and the growth and fitness dashboards.
Schedule changes shape which slots guests can book, so the agent tells you which appointments a change touches. By default you confirm each call; you can switch that off for this tool.
MCP callzenoti_write → manage_employee_schedule
REST endpointPOST https://cotlet.dev/api/v1/zenoti/employee-schedule/manage
| Name | Type | Description |
|---|---|---|
| action string required | string | One of `list`, `update_schedule`, `add_block_out`, `record_attendance`. `list` only reads. |
| center string | string | Center name. Leave empty for the center your login opens. |
| employee string | string | Employee name. |
| date string | string | ISO date. |
| hours object | object | Start and end, or the block-out reason. |
{
"action": "action"
} {
"center": "Downtown",
"employee": "Provider A",
"date": "2026-11-20",
"block_out": "13:00-14:00 Training",
"saved": true
} Returns the rows your role may see. Nothing is changed and no payroll is run.
MCP callzenoti_read → run_report
REST endpointGET https://cotlet.dev/api/v1/zenoti/reports/run
| Name | Type | Description |
|---|---|---|
| report string required | string | Report name as Zenoti lists it, for example Employee Payroll Summary v2, Employee Hourly Pay/Service Commission or Loyalty points report. |
| center string | string | Center name. Leave empty for the center your login opens. |
| from string | string | ISO date. |
| to string | string | ISO date. |
{
"report": "report"
} {
"report": "Employee Hourly Pay/Service Commission",
"center": "Downtown",
"rows": [
{
"employee": "Provider A",
"service_commission": 1240
},
{
"employee": "Provider B",
"service_commission": 980
}
]
} Abandoned appointments are bookings guests started and did not finish; flagged calls are marked by AI for signs such as negative sentiment. Use them to decide who to call back.
MCP callzenoti_read → view_hyperconnect_reports
REST endpointGET https://cotlet.dev/api/v1/zenoti/hyperconnect-reports/view
| Name | Type | Description |
|---|---|---|
| report string required | string | `analytics`, `abandoned_appointments`, `agent_metrics`, `flagged_calls`, `call_volume`, `missed_calls`, `spam_blocked` or `call_transfer`. |
| from string | string | ISO date. |
| to string | string | ISO date. |
{
"report": "report"
} {
"report": "abandoned_appointments",
"from": "2026-11-09",
"to": "2026-11-15",
"rows": [
{
"guest": "Sample Guest",
"service": "Deep Tissue Massage",
"date": "2026-11-14"
}
]
} The dashboard tracks the impact of Zenoti's growth features. It is off by default; your CSM or Zenoti representative enables it and you assign permissions.
MCP callzenoti_read → view_growth_dashboard
REST endpointGET https://cotlet.dev/api/v1/zenoti/growth-dashboards/view
| Name | Type | Description |
|---|---|---|
| center string | string | Center name. Leave empty for the center your login opens. |
| from string | string | ISO date. |
| to string | string | ISO date. |
{
"center": "Downtown",
"capacity": "Open slots filled 64%",
"utilization": "Provider hours booked 78%",
"realization": "Price realized 93%"
} For gyms and studios on Zenoti's fitness module. Nothing is changed.
MCP callzenoti_read → view_fitness_dashboard
REST endpointGET https://cotlet.dev/api/v1/zenoti/fitness-dashboards/view
| Name | Type | Description |
|---|---|---|
| center string | string | Center name. Leave empty for the center your login opens. |
| from string | string | ISO date. |
| to string | string | ISO date. |
{
"center": "Studio North",
"total_sales": 42800,
"membership_sales": 61,
"attendance": 1840,
"new_membership_sales": 23
} Your signed-in Zenoti browser profile, AES-256-GCM encrypted, in Finland. Never your password.
The 20 Zenoti tools. The session cookie stays in the Cloud Browser.
The centers and screens your employee security role opens, nothing more.
Security roles, payroll runs and tip payouts, payment terminals, refunds, Marketplace add-ons and organization settings.
You sign in again yourself, in the same Cloud Browser.
Disable Zenoti for agents, reset the browser, or change your Zenoti password.
You type your Zenoti password yourself; the agent only uses the session that sign-in leaves behind. Our site scores A+ on Qualys SSL Labs, securityheaders.com and Mozilla Observatory (live results).
Zenoti is replacing screens as it goes: the redesigned Appointment Book, the new kiosk on ZMA before the old kiosk retires in July 2026, and HyperConnect beside ezConnect. Cotlet follows those screens, and your agent keeps the same tool names.
Modules that Zenoti enables per business, such as Queue, fitness, HyperConnect or the growth dashboard, are there for the agent only when your business has them.
If Zenoti signs you out, one click in the Cotlet console reopens the Cloud Browser so you can sign in again.
| Action | How to put it right |
|---|---|
| Appointment moved to the wrong slot | Reschedule it back with manage_appointments |
| Guest profile field changed | Call manage_guests again with the earlier value |
| Purchase order drafted | Still a draft: change it in Zenoti with your purchasing team |
| Reply, review response or broadcast sent | Already with the guest or public: follow up yourself |
All 14 write tools ask first: by default you confirm each call, and you can switch that off per tool. The 6 read tools, from the Appointment Book to the dashboards, run at once.
{
"name": "manage_appointments",
"arguments": {
"action": "reschedule",
"center": "Downtown",
"appointment_id": "apt_88213",
"start": "2026-11-21T11:00"
}
} curl -X POST https://cotlet.dev/api/v1/zenoti/appointments/manage \
-H "Authorization: Bearer $COTLET_API_KEY" \
-H "Content-Type: application/json" \
-d '{"action":"reschedule","center":"Downtown","appointment_id":"apt_88213","start":"2026-11-21T11:00"}' {
"appointment_id": "apt_88213",
"guest": "Example Guest",
"service": "Signature Facial",
"employee": "Provider A",
"start": "2026-11-21T11:00",
"status": "Booked"
} The example moves Example Guest's Signature Facial to Saturday at 11:00 with the same provider. A cron job or n8n flow can make the same call over REST at /api/v1/zenoti with the same key and price, in JSON. Failed calls are free.
About $25 a monthfor a day spa with two centers, 4,280 credits. Your Zenoti subscription stays as it is.
| Job | Calls | Credits |
|---|---|---|
| Abandoned bookings call list | 4 × 22 | 880 |
| Guest inbox replies | 1 × 80 | 800 |
| Reschedules from the inbox | 1 × 40 | 400 |
| Guest profile updates | 1 × 30 | 300 |
| Review replies | 1 × 20 | 200 |
| Weekly commission report, two centers | 2 × 4 | 80 |
| Purchase orders | 2 × 4 | 80 |
| SMS broadcasts | 2 × 2 | 40 |
| Cloud Browser, 30 days | 1,500 | |
| Total | 278 calls | 4,280 |
The smallest pack, 5,000 credits for $29, covers this month. A busier inbox or more centers mean more calls.
Credit packs are one-time purchases, not a subscription. The month above is built from our own assumptions, not measured customer usage.
| 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 |
|---|---|---|
| Zenoti API and webhooks | Documented REST endpoints and event notifications for your own code. | API package through your CSM; your developers build and host it. |
| Zeenie | Zenoti's assistant for help articles, insights and front desk support. | Inside Zenoti; not a connector for ChatGPT or Claude. |
| AI Business Advisor | Plain-English KPI answers and dashboards from your Zenoti data. | Marketplace add-on with credits; answers, does not act. |
| By hand | Work each inbox, report and review in Zenoti. | One screen at a time, between guests. |
If your business has the API package and developers for the job, use the API: it is Zenoti's own route. Cotlet fits when you want ChatGPT, Claude or a script working in Zenoti today from your login, including the inbox and review screens, with nothing to host.
Behind Cotlet is Take Group sp. z o.o., a software company registered in Poland, EU (VAT PL6342984273), in business since 2019 and led by Bart Krawczyk (Co-founder, CTO) and Jake Slugocki (Co-founder, SEO, sales and marketing). Questions about the Zenoti tools: contact@cotlet.dev.
Sign up free at https://cotlet.dev/signup?app=zenoti, turn on Zenoti under Integrations in the console and sign in to Zenoti in your Cloud Browser. Then connect your AI agent and ask it about today's appointment book. The trial needs no card.
Zenoti documents a REST API and webhooks at docs.zenoti.com for centers, guests, appointments, employees and memberships, but a business needs the API package, enabled through its Zenoti Customer Success Manager, plus a backend app with App ID, App Secret and API Key (checked 13 Nov 2026). No Zenoti MCP server or official ChatGPT or Claude connector was verified. Cotlet does not need the API package: it works in your own signed-in Zenoti account.
Zeenie and AI Business Advisor are Zenoti's own AI products inside Zenoti; AI Business Advisor is an add-on from the Zenoti Marketplace that uses credits. Cotlet is separate: it lets ChatGPT, Claude or a script you choose work in Zenoti with the tools on this page.
The centers and screens your login's security role opens. A login limited to one center gives the agent one center; an organization-level role gives it more.
Not for Cotlet. The API package is for Zenoti's own API; Cotlet works through your employee login, so the tools reach what your security role reaches.
Only in how it is called. Both carry the same 20 tools, inputs, answers, API key and price. Agents use MCP; scripts and n8n HTTP steps use REST.
No. Cotlet is independent and not affiliated with Zenoti.
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