Health & fitness
Trainerize
Clients, programs, check-ins and messages for your Trainerize business.
14 endpoints
Connect Mindbody classes, rosters, clients and contracts to Claude or ChatGPT. Ask in plain words to rebook a cancelled class, list clients who stopped coming or report fill rates. Cotlet hosts it, with no API key and no developer setup.
13 tools Read and write
Mindbody has an official Public API v6 and a Webhooks API, but live access needs a developer approval, an activation by each studio owner and a metered fee, and it has no official MCP server (checked 6 Nov 2026). Cotlet runs 13 Mindbody tools hosted: no API key, no developer account, and they work inside the ChatGPT and Claude apps.
| What you need | Public API v6 | GitHub MCP server | Cotlet |
|---|---|---|---|
| How you get in | Developer account, approval, owner activation | Needs the same API credentials | Your own staff login |
| Classes, rosters, clients, contracts | Yes, once live | Yes, through the API | Yes |
| Book, cancel, add a client | Yes, once live | Some servers, behind flags | Yes, after your OK |
| Use it in the ChatGPT or Claude app | You build it | Runs on your own computer | Hosted, runs 24/7 |
| Cost | Metered per call | Free, plus API calls | Credits per call, no API meter |
Checked 6 Nov 2026. Sources: Mindbody Developer FAQs · Mindbody Public API V6.0 · Mindbody Webhooks API Documentation · Zapier: Mindbody not yet supported
Use your staff login in its Cloud Browser.
Paste one address, approve the sign-in.
Your agent calls the Mindbody tools.
We never keep your Mindbody password, and no booking, cancel or contract change goes through until you approve it. Who can see your session
Add one address to your agent. Chat apps sign in with Cotlet, editors and scripts use an API key.
Enable Mindbody for agents. Sign up, sign in to Mindbody in its Cloud Browser with your staff login, then press Enable for agents.
Add the Cotlet address. Paste https://cotlet.dev/mcp/v1 into your agent as an MCP server or connector.
Approve the connection. Chat apps open a Cotlet sign-in. Editors, n8n and scripts take an API key from the console.
One shared address, https://cotlet.dev/mcp/v1, carries Mindbody along with your other apps. If you enable Mindbody after connecting, refresh the connector and the new tools appear.
Settings > Connectors > Add custom connector
URL: https://cotlet.dev/mcp/v1/connect
Claude Code:
claude mcp add --transport http cotlet-mindbody \
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-mindbody": {
"url": "https://cotlet.dev/mcp/v1",
"headers": { "Authorization": "Bearer ${env:COTLET_API_KEY}" }
}
}
} # ~/.codex/config.toml
[mcp_servers.cotlet-mindbody]
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: mindbody_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: mindbody_write Dates are read in the studio's time zone. The roster lists the waitlist apart from the booked clients.
Reads the class schedule for the dates you give, in start time order. Each class has a class_id for get_class_roster and book_client_into_class, the class name, teacher, start and end time, how many are booked and the maximum. A class that was cancelled is marked cancelled. Dates are read in the studio's time zone. The login needs the staff permission to view the schedule.
MCP callmindbody_read → list_classes
REST endpointGET https://cotlet.dev/api/v1/mindbody/classes
| Name | Type | Description |
|---|---|---|
| start_date date required | date | First day to list. |
| end_date date | date | Last day to list. Default: the same day as start_date. |
| teacher string | string | Only classes of this teacher, by name. |
{
"start_date": "2026-10-01"
} {
"classes": [
{
"class_id": "c_48121",
"name": "Morning Vinyasa",
"teacher": "Dana Reyes",
"starts_at": "2026-11-10T07:00:00",
"ends_at": "2026-11-10T08:00:00",
"booked": 18,
"capacity": 20,
"status": "scheduled"
},
{
"class_id": "c_48122",
"name": "Lunch Pilates",
"teacher": "Sam Okafor",
"starts_at": "2026-11-10T12:15:00",
"ends_at": "2026-11-10T13:00:00",
"booked": 12,
"capacity": 14,
"status": "scheduled"
}
]
} Returns the people on the roster of one class and, below them, the waitlist in the order clients joined it. Each person has a client_id and the booking_id you pass to cancel_client_booking. The count of the roster matches booked in list_classes. The waitlist is empty when the class has no waitlist or it is not full.
MCP callmindbody_read → get_class_roster
REST endpointGET https://cotlet.dev/api/v1/mindbody/class/{class_id}/roster
| Name | Type | Description |
|---|---|---|
| class_id string required | string | Class ID from list_classes. |
{
"class_id": "class_8c41d2"
} {
"class_id": "c_48121",
"name": "Morning Vinyasa",
"roster": [
{
"client_id": "100234",
"name": "Ana Lopez",
"booking_id": "b_90311"
},
{
"client_id": "100871",
"name": "Tom Becker",
"booking_id": "b_90314"
}
],
"waitlist": [
{
"client_id": "101552",
"name": "Maria Silva"
}
]
} Run search_clients before add_client to avoid a duplicate. How far back visits go follows the studio's Client History Windows setting.
Searches the studio's clients and returns up to 25 matches with client_id, name, email and membership status. Use the client_id in the other client tools. An empty result means no client matches, so it is the check to run before add_client. The login needs the staff permission to view client info.
MCP callmindbody_read → search_clients
REST endpointGET https://cotlet.dev/api/v1/mindbody/clients/search
| Name | Type | Description |
|---|---|---|
| query string required | string | Name, email address or phone number. |
{
"query": "query"
} {
"clients": [
{
"client_id": "100234",
"name": "Ana Lopez",
"email": "ana@example.com",
"membership_status": "Active"
}
]
} Returns what the Client Info screen shows in its Account section: contact details, birthday, client ID, the membership status (for example Active, Expired, Terminated or Suspended), the memberships with their end dates and sessions left, and the date of the last and the next visit. Read only.
MCP callmindbody_read → get_client
REST endpointGET https://cotlet.dev/api/v1/mindbody/clients/{client_id}
| Name | Type | Description |
|---|---|---|
| client_id string required | string | Client ID from search_clients. |
{
"client_id": "client_8c41d2"
} {
"client_id": "100234",
"name": "Ana Lopez",
"email": "ana@example.com",
"birthday": "1990-04-12",
"membership_status": "Active",
"memberships": [
{
"name": "Unlimited Monthly",
"ends_on": "2026-12-31",
"sessions_left": null
}
],
"last_visit": "2026-10-02",
"next_visit": "2026-11-11"
} Returns the visits on the client's Visits screen, newest first, with the class or appointment, the date and the visit status. How far back it goes follows the studio's Client History Windows setting unless you pass a start date. Use it to see how often someone comes.
MCP callmindbody_read → list_client_visits
REST endpointGET https://cotlet.dev/api/v1/mindbody/client-visits
| Name | Type | Description |
|---|---|---|
| client_id string required | string | Client ID from search_clients. |
| since date | date | Only visits on or after this date. |
{
"client_id": "client_8c41d2"
} {
"client_id": "100234",
"visits": [
{
"date": "2026-10-02",
"name": "Morning Vinyasa",
"status": "signed in"
},
{
"date": "2026-09-29",
"name": "Lunch Pilates",
"status": "signed in"
}
]
} Returns the contracts on the client's account with the contract name, status, end date, and the state of the autopay as the Autopay Schedule screen shows it. A month-to-month contract has no end date and runs until it is terminated. A contract paused by a declined autopay says so. Use contract_id with terminate_client_contract.
MCP callmindbody_read → list_client_contracts
REST endpointGET https://cotlet.dev/api/v1/mindbody/client-contracts
| Name | Type | Description |
|---|---|---|
| client_id string required | string | Client ID from search_clients. |
{
"client_id": "client_8c41d2"
} {
"client_id": "100234",
"contracts": [
{
"contract_id": "ct_5521",
"name": "Unlimited Monthly",
"status": "Active",
"ends_on": null,
"autopay": "next payment 2026-12-01"
}
]
} Adds a client with the name and email you give and returns the new client_id. The studio's welcome email goes out only if the welcome email is set to send by default or you pass send_welcome_email as true, and then it reaches the client. It needs the staff permission Add Client. Run search_clients first, so you do not create a duplicate. By default you confirm each call; you can switch that off for this tool.
MCP callmindbody_write → add_client
REST endpointPOST https://cotlet.dev/api/v1/mindbody/clients
| Name | Type | Description |
|---|---|---|
| first_name string required | string | First name. |
| last_name string required | string | Last name. |
| email string required | string | Email address. |
| phone string | string | Mobile phone number. |
| send_welcome_email boolean | boolean | Send the welcome email. Default: the studio's own setting. |
{
"first_name": "first name",
"last_name": "last name",
"email": "jane@example.com"
} {
"client_id": "102210",
"name": "Lena Ortiz",
"email": "lena@example.com",
"welcome_email_sent": true
} Edits the fields you pass on the client's Client Info and leaves the rest as it is. It returns the client as saved. It needs the staff permission to edit client info. It reaches no one and is undone with one more call, so it does not wait for your OK.
MCP callmindbody_write → update_client
REST endpointPATCH https://cotlet.dev/api/v1/mindbody/clients/{client_id}
| Name | Type | Description |
|---|---|---|
| client_id string required | string | Client ID from search_clients. |
| email string | string | New email address. |
| phone string | string | New mobile phone number. |
{
"client_id": "client_8c41d2"
} {
"client_id": "100234",
"name": "Ana Lopez",
"email": "ana.lopez@example.com",
"phone": "555 0142",
"updated": [
"email",
"phone"
]
} The studio's own rules still apply: a client without a valid pricing option is not booked, and a late cancel follows the studio policy.
Adds the client to the class roster, or to the waitlist when the class is full and has a waitlist, and returns the booking and the place. The studio's own rules still apply: a client without a valid pricing option is not booked, and the call returns the reason. The studio's class confirmation email goes to the client if that notification is on. By default you confirm each call; you can switch that off for this tool.
MCP callmindbody_write → book_client_into_class
REST endpointPOST https://cotlet.dev/api/v1/mindbody/class/{class_id}/clients/{client_id}/into-class
| Name | Type | Description |
|---|---|---|
| client_id string required | string | Client ID from search_clients. |
| class_id string required | string | Class ID from list_classes. |
{
"client_id": "100234",
"class_id": "c_48125"
} {
"booking_id": "b_90420",
"class_id": "c_48125",
"client_id": "100234",
"place": "roster",
"booked": 15,
"capacity": 20
} Cancels one booking from get_class_roster. cancel_type is early or late: Mindbody applies the studio's own policy, so a late cancel can use up a visit or charge a fee. The studio's cancellation email goes to the client if that notification is on. A cancelled booking is put back with book_client_into_class, not with an undo. By default you confirm each call; you can switch that off for this tool.
MCP callmindbody_write → cancel_client_booking
REST endpointPOST https://cotlet.dev/api/v1/mindbody/bookings/{booking_id}/client-booking/cancel
| Name | Type | Description |
|---|---|---|
| booking_id string required | string | Booking ID from get_class_roster. |
| cancel_type enum required | enum | early or late. |
{
"booking_id": "booking_8c41d2",
"cancel_type": "early"
} {
"booking_id": "b_90311",
"client_id": "100234",
"status": "cancelled",
"cancel_type": "early"
} Terminates the contract from list_client_contracts, which ends its remaining autopays. It needs the staff permission to terminate client contracts. A termination can be cancelled while the contract's end date has not passed; after that the contract has to be sold again. By default you confirm each call; you can switch that off for this tool.
MCP callmindbody_write → terminate_client_contract
REST endpointPOST https://cotlet.dev/api/v1/mindbody/contracts/{contract_id}/clients/{client_id}/contract/terminate
| Name | Type | Description |
|---|---|---|
| contract_id string required | string | Contract ID from list_client_contracts. |
| client_id string required | string | Client ID the contract belongs to. |
{
"contract_id": "contract_8c41d2",
"client_id": "client_8c41d2"
} {
"contract_id": "ct_5521",
"client_id": "100234",
"status": "Terminated",
"autopays_stopped": true
} Each report needs the matching staff permission; without it the call names the missing one.
Reads the Attendance with Revenue report from Insights > Reports for the dates you give, one row per class with the booked and signed-in counts. It needs the staff permission for that report; without it the call fails with a permission error and the agent says which permission is missing.
MCP callmindbody_read → get_attendance_report
REST endpointGET https://cotlet.dev/api/v1/mindbody/attendance-report
| Name | Type | Description |
|---|---|---|
| start_date date required | date | First day of the report. |
| end_date date required | date | Last day of the report. |
{
"start_date": "2026-10-01",
"end_date": "2026-10-01"
} {
"rows": [
{
"class": "Morning Vinyasa",
"date": "2026-11-03",
"booked": 18,
"signed_in": 16
},
{
"class": "Evening Spin",
"date": "2026-11-03",
"booked": 15,
"signed_in": 13
}
],
"totals": {
"booked": 33,
"signed_in": 29
}
} Reads the Staff Schedule report (Insights > Reports > Staff > Administrative): the classes each teacher is scheduled for in the dates you give, grouped by teacher. It needs the staff permission Schedule at a Glance/Attendance (Everyone's Schedule).
MCP callmindbody_read → list_staff_schedule
REST endpointGET https://cotlet.dev/api/v1/mindbody/staff-schedules
| Name | Type | Description |
|---|---|---|
| start_date date required | date | First day to list. |
| end_date date | date | Last day to list. Default: the same day as start_date. |
{
"start_date": "2026-10-01"
} {
"teachers": [
{
"name": "Dana Reyes",
"classes": [
{
"name": "Morning Vinyasa",
"starts_at": "2026-11-10T07:00:00"
}
]
},
{
"name": "Sam Okafor",
"classes": [
{
"name": "Lunch Pilates",
"starts_at": "2026-11-10T12:15:00"
}
]
}
]
} The signed-in staff profile, AES-256-GCM encrypted, kept in Finland. Never your password.
The 13 Mindbody tools, not the session cookie.
What your staff permissions show: schedule, clients, visits, contracts, reports.
Card payments, selling a pricing option or contract, refunds, staff pay.
Your agent gets a link and you sign in again yourself.
Disable for agents, reset the browser, or deactivate the staff login in Mindbody.
Our site scores A+ on Qualys SSL Labs, securityheaders.com and Mozilla Observatory (live results).
The agent works in Mindbody the way a staff member does, in the same web app, under the login you sign in with. What it can do follows that login's staff permissions: Add Client to add a client, the permission to terminate client contracts to end a contract, the report permissions for the attendance report. A call without the permission fails and names it.
Studios that want the agent apart from the owner create a separate staff login for it and give it only the permissions the jobs need. Mindbody then lists its changes under that name.
The studio's own emails still go out: a booking or cancellation sends the class confirmation or cancellation email to the client if that notification is on. Read the call before you approve it.
When Mindbody moves a screen or renames a field, the fix happens on our side and your prompts keep working. status.cotlet.dev checks the site, console and API every 3 minutes.
| Action | Undo |
|---|---|
| Book a client into a class | Cancel the booking; the studio policy decides whether an early or late cancel costs a visit |
| Cancel a booking | Book the client again if there is room; the cancel stays in the history |
| Update a client | Call update_client again with the old details |
| Add a client | Fix the details in Client Info; no tool deletes a client |
| Terminate a contract | Cancel the termination while the contract end date has not passed; after that the contract is sold again |
4 of 13 tools ask first: add_client, book_client_into_class, cancel_client_booking and terminate_client_contract. update_client reaches no one and one more call undoes it, so it runs at once. You can turn the wait off per tool, for example for a nightly lead import.
Choose cancel_type early or late with care: Mindbody applies the studio's own policy, so a late cancel can use up a visit or charge a fee.
{
"name": "book_client_into_class",
"arguments": {
"client_id": "100234",
"class_id": "c_48125"
}
} curl -X POST https://cotlet.dev/api/v1/mindbody/class/c_48125/clients/100234/into-class \
-H "Authorization: Bearer $COTLET_API_KEY" {
"booking_id": "b_90420",
"class_id": "c_48125",
"client_id": "100234",
"place": "roster",
"booked": 15,
"capacity": 20
} A cron job or script calls the same tools over REST, with the same key and the same price per call. A booking with no valid pricing option fails with the reason, and a failed call is free. Each tool in the table above shows its REST path.
About $23 a monthfor one studio's front desk chores, 3,960 credits. Mindbody keeps billing your plan as before.
| Job | Calls | Credits |
|---|---|---|
| Front desk roster and schedule lookups | 2 × 30 | 600 |
| Rebook a cancelled class of 12 | 26 × 2 | 520 |
| Find lapsed members, weekly | 13 × 4 | 520 |
| Attendance and fill-rate report, weekly | 3 × 4 | 120 |
| Add a new lead as a client | 2 × 20 | 400 |
| Check stalled contracts | 2 × 15 | 300 |
| Cloud Browser, 30 days | 1,500 | |
| Total | 3,960 |
Mindbody publishes no per-studio counts, so the month is our example: a studio of about 200 members and 40 classes a week, two cancelled classes, 20 new leads. Mindbody lists plans from $79 a month per location, the higher plans by quote (mindbodyonline.com, 6 Nov 2026). 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 |
|---|---|---|
| vespo92/MindbodyMCP | A TypeScript MCP server with 50+ tools for classes, clients, sales and staff, 11 stars. | Runs on your computer with Public API credentials; last commit 31 Mar 2026. |
| alex454-byte/mindbody-mcp-server | Read-only by default, masks personal data, writes behind flags, 0 stars. | Public API credentials and a local install; last commit 15 Oct 2026. |
| NoBanks/mindbody-mcp | Python server with 5 tools; booking and checkout are switched off by default. | Public API credentials; small tool set. |
| Pipedream | A hosted Mindbody MCP address for chat apps. | Connects through Pipedream and the Mindbody API route. |
| Zapier | Lists Mindbody as not yet supported; paid connectors turn Mindbody webhooks into Zaps. | Reacts to events, no agent that reads rosters or books. |
The official Public API is the route for a developer who wants a custom integration and is willing to wait for approval and owner activation. Cotlet suits a studio that wants its own agent working this week, in the ChatGPT or Claude app, on the staff login it already has.
Take Group sp. z o.o. runs Cotlet, a software company registered in Poland, EU (VAT PL6342984273), working since 2019 and founded by Bart Krawczyk (Co-founder, CTO) and Jake Slugocki (Co-founder, SEO, sales and marketing). Questions about the Mindbody tools go to contact@cotlet.dev.
Sign up at cotlet.dev, log in to Mindbody 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 Mindbody account through Cotlet, in their phone apps too.
With Cotlet, ChatGPT, Claude and other AI agents handle jobs like these in Mindbody: rebook clients from a cancelled class; find clients who stopped coming; check clients with a stalled contract. You ask in plain words, and anything that reaches other people waits for your OK first.
Create a free account at https://cotlet.dev, open Mindbody under Integrations in the console and sign in to Mindbody in its Cloud Browser. The trial starts with your first app, no card asked.
Sign up at cotlet.dev, log in to Mindbody 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 Mindbody account through Cotlet, in their phone apps too.
No. Mindbody has no ChatGPT or Claude connector of its own (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 and the class and books them in, or cancels a booking. Each booking waits for your OK by default, which you can switch off per tool.
Yes, with Cotlet. ChatGPT lists the day's classes, reads each roster and pulls the attendance report, in your own Mindbody login. Reading sends nothing to anyone.
Mindbody's developer FAQ says the API has a limit of 1,000 calls a day, then one third of a cent for every call, and that you are charged only with live clients. The FAQ is dated 2023, so check the developer portal for the current rate. Cotlet works in your own Mindbody login and does not use those API calls.
Your own Mindbody business login, as owner or staff. What the agent can do follows that login's staff permissions: for example, Add Client to add a client and the permission to terminate client contracts to end a contract. A call without the permission fails and names it.
No. The tools read classes, clients, visits and contracts, book and cancel class bookings, add and edit clients and terminate a contract. Selling a pricing option or contract and charging a card stay in Mindbody.
Yes, through its Webhooks API for approved developers. Cotlet has no trigger for new bookings, so run your agent on a schedule, for example a list_classes and get_class_roster pass every morning.
It works in the Mindbody site you sign in to, with the schedule and permissions that staff login has.
Only in how you call it. Both have the same 13 tools, inputs, answers, API key and price. Agents speak MCP; scripts and HTTP steps call REST.
No. Cotlet is independent and not affiliated with Mindbody.
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